MongoDB - 仅投影数组中的匹配元素
MongoDB - Project only the matching element in an array
如何从具有以下结构的 Mongo 文档的数组中获取一个元素:
{
array : [
{type: 'cat', name: 'George'}
{type: 'cat', name: 'Mary'}
{type: 'dog', name: 'Steve'}
{type: 'dog', name: 'Anna'}
]
}
例如我需要找到史蒂夫,在这种情况下结果必须如下所示:
{
array : [
{type: 'dog', name: 'Steve'}
]
}
左右:{type: 'dog', name: 'Steve'}
我知道如何在发布时制作它,但我需要在整个数组可用的客户端制作它,我可以使用 forEach return 来自数组的这个值,但我正在寻找更优雅的方式(使用 Mongo 查询)。
使用位置运算符($
)仅投影第一个匹配的子文档。
db.t.find({"array":{"type":"dog", "name":"Steve"}},{"array.$":1})
使用 meteor
,您必须坚持聚合,因为 positional
运算符不起作用:
db.t.aggregate([
{$match:{"array.type":"dog","array.name":"Steve"}},
{$unwind:"$array"},
{$match:{"array.type":"dog","array.name":"Steve"}}
])
如何从具有以下结构的 Mongo 文档的数组中获取一个元素:
{
array : [
{type: 'cat', name: 'George'}
{type: 'cat', name: 'Mary'}
{type: 'dog', name: 'Steve'}
{type: 'dog', name: 'Anna'}
]
}
例如我需要找到史蒂夫,在这种情况下结果必须如下所示:
{
array : [
{type: 'dog', name: 'Steve'}
]
}
左右:{type: 'dog', name: 'Steve'}
我知道如何在发布时制作它,但我需要在整个数组可用的客户端制作它,我可以使用 forEach return 来自数组的这个值,但我正在寻找更优雅的方式(使用 Mongo 查询)。
使用位置运算符($
)仅投影第一个匹配的子文档。
db.t.find({"array":{"type":"dog", "name":"Steve"}},{"array.$":1})
使用 meteor
,您必须坚持聚合,因为 positional
运算符不起作用:
db.t.aggregate([
{$match:{"array.type":"dog","array.name":"Steve"}},
{$unwind:"$array"},
{$match:{"array.type":"dog","array.name":"Steve"}}
])