MongoDB - 仅投影数组中的匹配元素

exp*_*erd 7 arrays mongodb meteor minimongo

如何从具有以下结构的 Mongo 文档中的数组中获取一个元素:

{
 array : [ 
           {type: 'cat', name: 'George'}
           {type: 'cat', name: 'Mary'} 
           {type: 'dog', name: 'Steve'} 
           {type: 'dog', name: 'Anna'}  

         ]
}
Run Code Online (Sandbox Code Playgroud)

例如,我需要得到 Steve,在这种情况下,结果必须如下所示:

{
 array : [ 
           {type: 'dog', name: 'Steve'}
 ] 
}
Run Code Online (Sandbox Code Playgroud)

或者: {type: 'dog', name: 'Steve'}

我知道如何在发布时制作它,但我需要在整个数组可用的客户端制作它,我可以使用 forEach 从数组中返回这个值,但我正在寻找更优雅的方式(使用 Mongo 查询)。

Bat*_*eam 7

使用位置运算符 ( $) 仅投影第一个匹配的子文档。

db.t.find({"array":{"type":"dog", "name":"Steve"}},{"array.$":1})
Run Code Online (Sandbox Code Playgroud)

使用meteor,您必须坚持聚合,因为positional运算符不起作用:

db.t.aggregate([
{$match:{"array.type":"dog","array.name":"Steve"}},
{$unwind:"$array"},
{$match:{"array.type":"dog","array.name":"Steve"}}
])
Run Code Online (Sandbox Code Playgroud)