Javascript 查询被引用单据的字段

Javascript 查询被引用单据的字段,javascript,node.js,mongodb,mongoose,mongodb-query,Javascript,Node.js,Mongodb,Mongoose,Mongodb Query,有两个系列“演员”和“电影” 1个参与者的示例: { _id: ObjectId("54f38bd9b814dca762778032"), name: { first: 'Jason', last: 'Statham' } } 两部电影的例子 { _id: ObjectId("54f5cbaf4d9f1129335993ef"), title: 'Fast & Furious 7', actors: [ ObjectId("54f38bd

有两个系列“演员”和“电影”

1个参与者的示例:

{
  _id: ObjectId("54f38bd9b814dca762778032"),
  name: {
    first: 'Jason',
    last: 'Statham'
  }
}
两部电影的例子

{
  _id: ObjectId("54f5cbaf4d9f1129335993ef"),
  title: 'Fast & Furious 7',
  actors: [
    ObjectId("54f38bd9b814dca762778032")
  ]
},
{
  _id: ObjectId("54f782493e7688c31f75307d"),
  title: 'Parker',
  actors: [
    ObjectId("54f38bd9b814dca762778032")
  ]
}
我怎样才能找到杰森·斯塔瑟姆的电影? 我使用Node.js+Express+Mongoose


谢谢

这叫做请求“加入”,MongoDB无法做到这一点

您可以在运行后在代码中使用数组,但当然,这需要首先引入“所有内容”。您甚至可以将查询指定为
.populate()
,以匹配您的条件。但这仍然意味着选择所有的父母

您还可以将“parentId”添加到“child”中,这将允许您查询“child”集合,只选择与父项匹配的文档,或者根据需要以这种方式“反向填充”

或者,您可以使用关系模型,而不是试图复制关系模型,并使用NoSQL引擎实现其设计目的。那么你所要求的工作

{
_id:ObjectId(“54f5cbaf4d9f1129335993ef”),
“标题”:“快速与狂暴7”,
“行动者:[
{“第一个”:“杰森”,“最后一个”:“斯塔萨姆”}
]
},
{
“_id”:ObjectId(“54f782493e7688c31f75307d”),
“头衔”:“帕克”,
“演员”:[
{“第一个”:“杰森”,“最后一个”:“斯塔萨姆”}
]
}
当然,与关系模型和引用模型相比,它复制了数据,但这是提高效率的成本


如果您不想使用NoSQL存储解决方案来获得它所要提供的功能的好处,那么这将是有成本的。正如他们所说的那样,选择正确的工具并以正确的方式使用。这称为请求“加入”,MongoDB无法做到这一点

运行后,您可以在代码中使用数组,但当然这需要先拉入“所有内容”。您甚至可以指定一个查询到
.populate()
,以匹配您的条件。但这仍然意味着选择所有父项

您还可以将“parentId”添加到“child”中,这将允许您查询“child”集合,只选择与父项匹配的文档,或者根据需要以这种方式“反向填充”

或者,您可以使用关系模型,而不是试图复制关系模型,并使用NoSQL引擎来实现它的设计目的

{
_id:ObjectId(“54f5cbaf4d9f1129335993ef”),
“标题”:“快速与狂暴7”,
“行动者:[
{“第一个”:“杰森”,“最后一个”:“斯塔萨姆”}
]
},
{
“_id”:ObjectId(“54f782493e7688c31f75307d”),
“头衔”:“帕克”,
“演员”:[
{“第一个”:“杰森”,“最后一个”:“斯塔萨姆”}
]
}
当然,与关系模型和引用模型相比,它复制了数据,但这是提高效率的成本


如果您不想使用NoSQL存储解决方案来获得它所要提供的功能的好处,那么将有成本。正如他们所说的,马是为了课程,所以选择正确的工具并以正确的方式使用。

这就是要求“加入”,这是MongoDB无法做到的

您可以在运行后在代码中使用数组,但当然,这需要首先引入“所有内容”。您甚至可以将查询指定为
.populate()
,以匹配您的条件。但这仍然意味着选择所有的父母

您还可以将“parentId”添加到“child”中,这将允许您查询“child”集合,只选择与父项匹配的文档,或者根据需要以这种方式“反向填充”

或者,您可以使用关系模型,而不是试图复制关系模型,并使用NoSQL引擎实现其设计目的。那么你所要求的工作

{
_id:ObjectId(“54f5cbaf4d9f1129335993ef”),
“标题”:“快速与狂暴7”,
“行动者:[
{“第一个”:“杰森”,“最后一个”:“斯塔萨姆”}
]
},
{
“_id”:ObjectId(“54f782493e7688c31f75307d”),
“头衔”:“帕克”,
“演员”:[
{“第一个”:“杰森”,“最后一个”:“斯塔萨姆”}
]
}
当然,与关系模型和引用模型相比,它复制了数据,但这是提高效率的成本


如果您不想使用NoSQL存储解决方案来获得它所要提供的功能的好处,那么这将是有成本的。正如他们所说的那样,选择正确的工具并以正确的方式使用。这称为请求“加入”,MongoDB无法做到这一点

运行后,您可以在代码中使用数组,但当然这需要先拉入“所有内容”。您甚至可以指定一个查询到
.populate()
,以匹配您的条件。但这仍然意味着选择所有父项

您还可以将“parentId”添加到“child”中,这将允许您查询“child”集合,只选择与父项匹配的文档,或者根据需要以这种方式“反向填充”

或者,您可以使用关系模型,而不是试图复制关系模型,并使用NoSQL引擎来实现它的设计目的

{
_id:ObjectId(“54f5cbaf4d9f1129335993ef”),
“标题”:“快速与狂暴7”,
“行动者:[
{“第一个”:“杰森”,“最后一个”:“斯塔萨姆”}
]
},
{
“_id”:ObjectId(“54f782493e7688c31f75307d”),
“头衔”:“帕克”,
“演员”:[
{“第一个”:“杰森”,“最后一个”:“斯塔萨姆”}
]
}
当然,与关系模型和引用模型相比,它复制了数据,但这是提高效率的成本


如果您不想使用NoSQL存储解决方案来获得它所要提供的功能的好处,那么将有成本。正如他们所说的,马是为了课程,所以选择正确的工具并以正确的方式使用。

假设你知道一个演员的IDJason Statham。你所要做的就是找到演员ID为Jason Statham的电影。这是一个例子

model.find({actors: "54f5cbaf4d9f1129335993ef"}, function(err, movies) {
    // You get all movies which an actor Jason Statham
});
你的电影模式应该是
var movieSchema = new Schema({
    title: String,
    actors: Array
});