如何在 MongoDB 中指定 _id 和对象 ID 数组作为复合主键?
How to specify _id and array of Object Ids as a composite primary key in MongoDB?
在 MongoDB 数据库中,创建了一个集合,并插入了一些数据:
>>> db.createCollection("Restaurants")
>> { "ok" : 1 }
>> db.Restaurants.insert({ "_id": "coolDinings",
>> "AppliedParameters": [ ObjectId("5617a7a52da21a733547b8da"),
>> ObjectId("5617a5102da21a733547b8d9") ], "Review": "excellent SeaFood", "Region": "USA" })
Mongo数据库默认行为是将“_id”视为主键。
但是,我想要一个由以下字段组成的复合主键:
- -1) "_id"
- -2) "AppliedParameters"
"AppliedParameters" 是一个 ObjectId 数组,它可以根据它存储的 ObjectId 的数量变化,运行从 0 到大约 20 或 30 个 ObjectId。
我知道以下代码将在上述两个字段上创建索引:
db.Restaurants.ensureIndex( { "_id": 1,"AppliedParameters": 1 }, { unique:true, sparse:true } );
但是,我的愿望是确保上述代码行将创建一个复合主键。
无论如何我运行代码。
为了检查是否创建了复合键,我只是重新运行再次插入第一个数据,因为我希望它会通过抛出与复合主键重复相关的错误来抱怨:
>> db.Restaurants.insert({ "_id": "coolDinings",
>> "AppliedParameters": [ ObjectId("5617a7a52da21a733547b8da"),
>> ObjectId("5617a5102da21a733547b8d9") ], "Review": "excellent SeaFood", "Region": "USA" })
但是,它只给出了以下错误:
E11000 重复键错误索引:test.Restaurants.$id 重复键:{ : "coolDinings" }
上述错误似乎表明“_id”重复。我希望 Mongo 客户端声明不允许重复复合主键。
我该如何完成上述任务?
mongodb 中没有 "composite" 个主键(从某种意义上说,它们跨越多个字段)。 _id
是唯一的主键。
如果你想要一个复杂的主键,由几条数据组成,将它们全部插入到_id
字段中。
注意 _id
值不能是数组(必须是基元或对象之一)。
不能做:
{ _id: [1, 2, 3] }
可以做到:
{ _id: { a: 1, b: [2, 3] } }
在 MongoDB 数据库中,创建了一个集合,并插入了一些数据:
>>> db.createCollection("Restaurants")
>> { "ok" : 1 }
>> db.Restaurants.insert({ "_id": "coolDinings",
>> "AppliedParameters": [ ObjectId("5617a7a52da21a733547b8da"),
>> ObjectId("5617a5102da21a733547b8d9") ], "Review": "excellent SeaFood", "Region": "USA" })
Mongo数据库默认行为是将“_id”视为主键。
但是,我想要一个由以下字段组成的复合主键:
- -1) "_id"
- -2) "AppliedParameters"
"AppliedParameters" 是一个 ObjectId 数组,它可以根据它存储的 ObjectId 的数量变化,运行从 0 到大约 20 或 30 个 ObjectId。
我知道以下代码将在上述两个字段上创建索引:
db.Restaurants.ensureIndex( { "_id": 1,"AppliedParameters": 1 }, { unique:true, sparse:true } );
但是,我的愿望是确保上述代码行将创建一个复合主键。
无论如何我运行代码。
为了检查是否创建了复合键,我只是重新运行再次插入第一个数据,因为我希望它会通过抛出与复合主键重复相关的错误来抱怨:
>> db.Restaurants.insert({ "_id": "coolDinings",
>> "AppliedParameters": [ ObjectId("5617a7a52da21a733547b8da"),
>> ObjectId("5617a5102da21a733547b8d9") ], "Review": "excellent SeaFood", "Region": "USA" })
但是,它只给出了以下错误:
E11000 重复键错误索引:test.Restaurants.$id 重复键:{ : "coolDinings" }
上述错误似乎表明“_id”重复。我希望 Mongo 客户端声明不允许重复复合主键。
我该如何完成上述任务?
mongodb 中没有 "composite" 个主键(从某种意义上说,它们跨越多个字段)。 _id
是唯一的主键。
如果你想要一个复杂的主键,由几条数据组成,将它们全部插入到_id
字段中。
注意 _id
值不能是数组(必须是基元或对象之一)。
不能做:
{ _id: [1, 2, 3] }
可以做到:
{ _id: { a: 1, b: [2, 3] } }