我是MongoDB的新手,并且在为我正在开发的新项目设置特定查询时遇到了一些困难。如何在MongoDB中找到深嵌入数组的对象?
我有一个数据结构,看起来像这样(简体版):
games: {_id: ..., scenes: [{_id: ..., views: [{_id: ...}]}]}
(即游戏中包含的场景集合,场景中包含的视图的集合)。
我想在这里查询的是一个特定的视图对象。我想答案包括使用$ elemMatch,但我该如何设置?一些研究+玩耍后,我知道我能做到这一点得到了现场:
db.collection("games").findOne({
_id: ObjectId(req.params.gid)},
{
scenes: {
$elemMatch: {_id: ObjectId(req.params.sid)}
}
}...
但我怎么延长这个,使其只拉特定视图我感兴趣的(由_id) ?
我想我总是可以找到我正在寻找手动使用for循环的视图对象,这带来了另一个问题。 Wrt的性能,最好是使用Mongo来做这样的查询,或者手动拉动整个文档来循环收集?
您不能仅获取数组中的对象。您必须提取整个文档。如果您想要自己创建子文档,则需要使用聚合框架。 – cdbajorin
@cdbajorin当你说“在他们自己的”,你的意思是不可能用_id值过滤掉我不想要的视图?或者你的意思是我查找的查询会给我一个类似'result.scenes [0] .views [0]'的结构吗?我对后者很好。 – JSideris