gpt4 book ai didi

node.js - 什么是最佳实践 "joining"mongoose/mongodb 中没有填充的一堆值

转载 作者:IT老高 更新时间:2023-10-28 13:30:08 26 4
gpt4 key购买 nike

首先让我声明我知道 mongoose 提供的填充方法,但是由于我的工作决定将来转移到 native mongodb 驱动程序,我不能再依赖填充来避免为自己工作稍后。

如果我有两个文档集合

People
{_id:1, name:Austin}
{_id:2, name:Doug}
{_id:3, name:Nick}
{_id:4, name:Austin}

Hobbies:
{Person: 1, Hobby: Cars}
{Person:1, Hobby: Boats}
{Person:3, Hobby: Chess}
{Person:4, Hobby: Cars}

我应该如何加入有兴趣的人的每个文档。理想情况下,我宁愿只需要调用数据库两次来获取人员,第二次获取爱好,然后返回客户端应用程序对象,并将它们连接在一起。

最佳答案

这取决于您最关心的问题。一般来说,我会说将爱好嵌入到人中,比如:

{
"_id":1,
"name":"Austin",
"hobbies": [
"Cars","Boats"
]
},
{
"_id":2,
"name":"Doug",
"hobbies": []
},

{
"_id":3,
"name":"Nick",
"hobbies": [
"Chess"
]
},

{
"_id":4,
"name":"Austin",
"hobbies": [
"Cars"
]
}

这将使您可以在 hobbies 上使用多键索引并允许这样的查询:

db.daCollection.find({"hobbies":"Cars"})

这会将两个 Austin 作为完整的文档返回。是的,我知道会有很多多余的条目。如果你想阻止这种情况,可以这样建模:

{
"_id": 1,
"name":"Cars"
},...

{
"_id":1,
"name":"Austin",
"hobbies": [
1, ...
]
}

这需要在爱好的名称字段上附加一个索引才能有效。因此,当您想找到每个上车的人时,您需要找到 _id 并像

一样查询它
db.person.find({"hobbies":1})

我认为如果您使用嵌入,它会更容易、更直观,并且对于大多数用例来说更快。

关于node.js - 什么是最佳实践 "joining"mongoose/mongodb 中没有填充的一堆值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23834338/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com