首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将_id和对象in数组指定为MongoDB中的复合主键?

如何将_id和对象in数组指定为MongoDB中的复合主键?
EN

Stack Overflow用户
提问于 2015-10-09 13:04:50
回答 1查看 947关注 0票数 0

在MongoDB数据库中,创建了一个集合,并插入了一些数据:

代码语言:javascript
复制
>>> db.createCollection("Restaurants")
>> { "ok" : 1 }

>> db.Restaurants.insert({ "_id": "coolDinings",
>> "AppliedParameters": [ ObjectId("5617a7a52da21a733547b8da"),
>> ObjectId("5617a5102da21a733547b8d9") ], "Review": "excellent    SeaFood", "Region": "USA" })

MongoDB默认行为是将"_id“作为主键。

但是,我想要一个由以下字段组成的复合主键:

  • -1) "_id“
  • -2) "AppliedParameters“

"AppliedParameters“是一个ObjectIds数组,它在存储的ObjectIds数量上确实会有所不同,可以从0到20或30 ObjectIds不等。

我知道以下代码将在上述两个字段上创建一个索引:

代码语言:javascript
复制
db.Restaurants.ensureIndex( { "_id": 1,"AppliedParameters": 1 }, { unique:true, sparse:true } ); 

但是,我的愿望是确保上述代码行将创建一个复合主键。

无论如何,我都是运行代码的。

为了检查是否创建了复合键,我再次重新运行了第一个数据插入,因为我希望它会通过抛出一个与复合主键副本相关的错误来抱怨:

代码语言:javascript
复制
    >> db.Restaurants.insert({ "_id": "coolDinings",
    >> "AppliedParameters": [ ObjectId("5617a7a52da21a733547b8da"),
    >> ObjectId("5617a5102da21a733547b8d9") ], "Review": "excellent        SeaFood", "Region": "USA" })

但是,它只给出了以下错误:

E11000重复键错误索引: test.Restaurants.$id键:{:"coolDinings“}

上述错误似乎表明"_id“是重复的。我想让Mongo客户端声明一些类似重复的复合主键是不允许的。

我该如何完成上述任务?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-09 13:10:38

mongodb中没有“复合”主键(从某种意义上说,它们跨越多个字段)。_id是唯一的主键。

如果您想要一个由几个数据组成的复杂主键,请将它们全部插入到_id字段中。

注意,_id值不能是数组(必须是原语或对象之一)。

做不到:

代码语言:javascript
复制
{ _id: [1, 2, 3] }

可以做到:

代码语言:javascript
复制
{ _id: { a: 1, b: [2, 3] } }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33039044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档