Javascript Mongo只返回数组匹配查询的元素
给出以下JSON示例:Javascript Mongo只返回数组匹配查询的元素,javascript,arrays,mongodb,Javascript,Arrays,Mongodb,给出以下JSON示例: { _id: "55ef729a66d78d24008xxxx", name: "The right one" items: [{ _id: "55ef729a66d78d24008xxxx", return: true }, { _id: "55ef729a66d78d24008xxxx", return: true }, { _id: "55ef72
{
_id: "55ef729a66d78d24008xxxx",
name: "The right one"
items: [{
_id: "55ef729a66d78d24008xxxx",
return: true
}, {
_id: "55ef729a66d78d24008xxxx",
return: true
}, {
_id: "55ef729a66d78d24008xxxx",
return: false
}]
}
我想编写一个指定items.return=true
的查询,它应该返回:
{
_id: "55ef729a66d78d24008xxxx",
name: "The right one"
items: [// 2 element array]
}
我见过很多人建议使用$elemMatch,比如这个,但正如它所说的,这个
只返回第一场比赛
但这只是返回在数组中具有某些值的父文档,这些值与items.return匹配。因此,在上面的示例中,它将返回所有3个数组元素
我希望在返回中完全忽略这些数组值。我不想在客户机中这样做,因为我使用项目id进行项目,如果我不需要它,我不想浪费项目。备选方案不完全符合您的要求
db.items.aggregate(
{$unwind:"$items"},
{$match:{"items.return":true}}
)
您可以使用聚合框架,但它不是最好的解决方案
db.collection.aggregate([
{$unwind:'$items'},
{$match:{'items.return':true}},
{$group:{_id:'$_id', name: '$name',items:{$push:'$items'}}}
])
一种选择是使用
$elemMatch
。检查,值得注意的是它只返回第一个匹配
db.items.find({}, {items: {$elemMatch: {return: "admin"}}}});
不同的问题,这个问题指的是返回具有匹配的精确数组的父文档,我需要更改数组本身。这不是问题,而是问题的答案。这里有几个答案,它们使用聚合框架只返回匹配的“元素”,因为这是唯一能够这样做的工具(除了map reduce)。来自审阅队列:我可以请求您在源代码周围添加一些上下文吗。只有代码的答案很难理解。如果你能在你的文章中添加更多的信息,这将有助于询问者和未来的读者。