在MongoDB数据库中,创建了一个集合,并插入了一些数据:
>>> db.createCollection("Restaurants")
>> { "ok" : 1 }
>> db.Restaurants.insert({ "_id": "coolDinings",
>> "AppliedParameters": [ ObjectId("5617a7a52da21a733547b8da"),
>> ObjectId("5617a5102da21a733547b8d9") ], "Review": "excellent SeaFood", "Region": "USA" })MongoDB默认行为是将"_id“作为主键。
但是,我想要一个由以下字段组成的复合主键:
"AppliedParameters“是一个ObjectIds数组,它在存储的ObjectIds数量上确实会有所不同,可以从0到20或30 ObjectIds不等。
我知道以下代码将在上述两个字段上创建一个索引:
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客户端声明一些类似重复的复合主键是不允许的。
我该如何完成上述任务?
发布于 2015-10-09 13:10:38
mongodb中没有“复合”主键(从某种意义上说,它们跨越多个字段)。_id是唯一的主键。
如果您想要一个由几个数据组成的复杂主键,请将它们全部插入到_id字段中。
注意,_id值不能是数组(必须是原语或对象之一)。
做不到:
{ _id: [1, 2, 3] }可以做到:
{ _id: { a: 1, b: [2, 3] } }https://stackoverflow.com/questions/33039044
复制相似问题