给出以下JSON示例:
{
_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,例如question,但正如它所说的,这个
仅返回第一场比赛
但这只返回在匹配items.return的数组中有一些值的父文档。所以在上面的例子中,它将返回所有3个数组元素。
我希望在返回时完全忽略这些数组值。我不想在客户端进行此操作,因为我使用_id项目进行项目,如果我不需要,则不要浪费项目。
答案 0 :(得分:2)
另一种方法是使用db.items.find({}, {items: {$elemMatch: {return: "admin"}}}});
。查看documentation,值得注意的是它只返回第一次匹配!
org.apache.kafka.connect.errors.DataException: JsonConverter with schemas.enable requires \"schema\" and \"payload\" fields and may not contain additional fields.
答案 1 :(得分:1)
备选不完全是你想要的
db.items.aggregate(
{$unwind:"$items"},
{$match:{"items.return":true}}
)
答案 2 :(得分:0)
您可以使用聚合框架,但它不是最好的解决方案
db.collection.aggregate([
{$unwind:'$items'},
{$match:{'items.return':true}},
{$group:{_id:'$_id', name: '$name',items:{$push:'$items'}}}
])