首页 > 解决方案 > MongoDB 如何使 2 个嵌套文档具有相同的 _id?

问题描述

我目前在我的 mongodb 集合中有 2 个文档。他们是:

"_id": "5b6c7109c21dfe2a4b557b1e",
"title": "Childish Gambino",
"datetime": "2018-09-16T00:00:00.000Z",
"venue": {
     "name": "Madison Square Garden",
     "city": "New York",
     "state": "NY"
     "_id": "5b6c7109c21dfe2a4b557b1d",
}

"_id": "5b6c71133acdbe2a4e51615d",
"title": "The Eagles",
"datetime": "2018-09-12T00:00:00.000Z",
"venue": {
     "name": "Madison Square Garden",
     "city": "New York",
     "state": "NY"
     "_id": "5b6c71133acdbe2a4e51615c",
}

虽然这是两场不同的音乐会,但都在麦迪逊广场花园举行。但是,在 2 个文档中,麦迪逊广场花园有 2 个不同的“_id”属性。有没有一种方法可以使它们具有相同的 _id,或者每次添加在麦迪逊广场花园发生的文档时,我是否必须手动输入相同的 _id?手动输入 _id 通常被认为是一种好的做法吗?对 mongodb 来说是新手,因此我们将不胜感激。谢谢!

标签: databasemongodbmongoose

解决方案


如果您使用 MongoDB 3.4 及更高版本,您可以使用$lookup这意味着在您的模式中您可以将 a 添加reference到实际Madison Square Garden(我假设它位于另一个集合中)。这样你的数据可能看起来像这样:

"_id": ObjectId('5b6c71133acdbe2a4e51615d'),
"title": "The Eagles",
"datetime": "2018-09-12T00:00:00.000Z",
"venueId": ObjectId('5b6c71133acdbe2a4e51615c')

您将能够使用$lookup 功能交叉引用该场地。

注意:这绝不比嵌入数据更有效,但它为您提供了一个参考 _id。


推荐阅读