【发布时间】:2016-09-24 15:00:05
【问题描述】:
我是 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 当您说“自己”时,您的意思是不可能过滤掉带有我不想要的 _id 值的视图吗?还是您的意思是我正在寻找的查询会给我一个类似
result.scenes[0].views[0]的结构?我同意后者。