Mongo只返回数组匹配查询的元素

时间:2015-10-26 18:56:45

标签: javascript arrays mongodb

给出以下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项目进行项目,如果我不需要,则不要浪费项目。

3 个答案:

答案 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'}}}
])