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

Arrays MongoDB-仅在数组中投影匹配的元素,arrays,mongodb,meteor,minimongo,Arrays,Mongodb,Meteor,Minimongo,如何从具有以下结构的Mongo文档的数组中获取一个元素: { array : [ {type: 'cat', name: 'George'} {type: 'cat', name: 'Mary'} {type: 'dog', name: 'Steve'} {type: 'dog', name: 'Anna'} ] } 例如,我需要得到Steve,在这种情况下,结果必须如此:

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

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

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

{
 array : [ 
           {type: 'dog', name: 'Steve'}
 ] 
}
大约:
{键入:'dog',名称:'Steve'}


我知道如何在发布时生成,但我需要在客户端生成,因为整个数组都可用,我可以使用forEach从数组返回此值,但我正在以更优雅的方式搜索(使用Mongo查询)。

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

db.t.find({"array":{"type":"dog", "name":"Steve"}},{"array.$":1})
使用
meteor
,您必须坚持聚合,因为
位置操作符不起作用:

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

在服务器端,看起来像您的查询实际上返回了包含匹配元素的数组,但在客户端(minimongo),它们返回整个数组。不确定问题是否仍然存在。如果是这样,您必须在-@expeerd中遍历所有子文档-您可能需要坚持在
minimongo
中聚合结果。请参阅我的最新答案。很抱歉回复太晚。聚合对我来说是可行的,但它只有服务器端实现,并且是非反应性的