Node.js 什么';“最佳实践”;加入;mongoose/mongodb中没有填充的一组值
首先,我要说的是,我知道mongoose提供的填充方法,但由于我的工作已经决定在将来使用原生mongodb驱动程序,我不能再依靠填充来避免为自己工作 如果我有两套文件Node.js 什么';“最佳实践”;加入;mongoose/mongodb中没有填充的一组值,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,首先,我要说的是,我知道mongoose提供的填充方法,但由于我的工作已经决定在将来使用原生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:
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"
]
}
这将使您能够在嗜好
上使用多键索引,并允许以下查询:
db.daCollection.find({"hobbies":"Cars"})
{
"_id": 1,
"name":"Cars"
},...
{
"_id":1,
"name":"Austin",
"hobbies": [
1, ...
]
}
这将返回两个奥斯汀作为完整的文件。是的,我知道会有很多多余的条目。如果你想避免这种情况,可以这样建模:
db.daCollection.find({"hobbies":"Cars"})
{
"_id": 1,
"name":"Cars"
},...
{
"_id":1,
"name":"Austin",
"hobbies": [
1, ...
]
}
这将需要在嗜好的name字段上添加一个索引才能提高效率。因此,当你想找到每一个进入汽车的人时,你需要找到\u id
并像查询一样进行查询
db.person.find({"hobbies":1})
我认为,如果使用嵌入,对于大多数用例来说,更容易、更直观、更快。使用ne的ID进行两个范围查询以填充另一个范围查询,这会降低查询计数,但会在应用程序端创建更多工作,但大多数人都是这样做的,而无需进行填充。另外,请注意,填充实际上是每个文档一个查询