Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 什么';“最佳实践”;加入;mongoose/mongodb中没有填充的一组值_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js 什么';“最佳实践”;加入;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:

首先,我要说的是,我知道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}

我应该如何加入《有爱好的人》中的每个文档。理想情况下,我更愿意只需调用数据库两次,一次获取人员,第二次获取爱好,然后返回到客户端应用程序对象,并将其加入到浏览器中

这取决于你最关心的是什么。一般来说,我会说把爱好融入人们的生活中,比如:

{
  "_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进行两个范围查询以填充另一个范围查询,这会降低查询计数,但会在应用程序端创建更多工作,但大多数人都是这样做的,而无需进行填充。另外,请注意,填充实际上是每个文档一个查询