Aus*_*vis 6 mongoose mongodb node.js
让我先说明我知道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: Chess}
{Person:4, Hobby: Cars}
Run Code Online (Sandbox Code Playgroud)
我应该如何加入爱好者的每个文件.理想情况下,我宁愿只需要调用数据库两次以获取人员,第二次调用业余爱好,然后返回客户端应用程序对象,并将它们加入到eeter中.
这取决于您最关心的问题是什么。一般来说,我会说将爱好嵌入到人们中,例如:
{
"_id":1,
"name":"Austin",
"hobbies": [
"Cars","Boats"
]
},
{
"_id":2,
"name":"Doug",
"hobbies": []
},
{
"_id":3,
"name":"Nick",
"hobbies": [
"Chess"
]
},
{
"_id":4,
"name":"Austin",
"hobbies": [
"Cars"
]
}
Run Code Online (Sandbox Code Playgroud)
这将使您可以使用多键索引hobbies并允许如下查询:
db.daCollection.find({"hobbies":"Cars"})
Run Code Online (Sandbox Code Playgroud)
这将返回两个奥斯汀作为完整的文件。是的,我知道会有很多多余的条目。如果您想阻止这种情况,可以像这样建模:
{
"_id": 1,
"name":"Cars"
},...
{
"_id":1,
"name":"Austin",
"hobbies": [
1, ...
]
}
Run Code Online (Sandbox Code Playgroud)
这需要在爱好的名称字段上添加一个额外的索引才能提高效率。因此,当您想要找到每个喜欢汽车的人时,您需要找到_id并查询它,例如
db.person.find({"hobbies":1})
Run Code Online (Sandbox Code Playgroud)
我认为如果使用嵌入,它会更容易、更直观,并且对于大多数用例来说速度更快。
| 归档时间: |
|
| 查看次数: |
180 次 |
| 最近记录: |