MongoDB - 根据对象数组的属性值进行查询

时间:2014-10-19 23:15:30

标签: arrays mongodb object

MongoDB全新。我很难通过嵌套在数组中的对象的属性进行查询。

我有以下数据结构:

{
    "sales":[
        {
            "item":1234,
            "seller":"SellerA",
            "buyer":"BuyerA"
        },
        {
            "item":5678,
            "seller":"SellerB",
            "buyer":"SellerB"
        },
        {
            "item":1122,
            "seller":"SellerA",
            "buyer":"BuyerA"
        },
        {
            "item":1199,
            "seller":"SellerB",
            "buyer":"SellerB"
        }
    ]
}

我有其他属性与"销售"数组,但我已经简化了示例。

我试图提取每个买方价值为" BuyerB的销售单据。"

我尝试过以下方法:

db.data.find({"sales": {$elemMatch: {buyer: "BuyerB"}}})
db.data.find({"sales.buyer": "BuyerB"}})

这些查询会运行,但会返回每一行数据,而不仅仅是那些买方价值为" BuyerB"

的数据。

我知道必须有一个简单的答案,但我的搜索结果是我已经尝试过但没有成功。

1 个答案:

答案 0 :(得分:0)

由于您可能会从数组中返回多个元素而 .find()无法执行此操作,因此您可以尝试聚合,例如:

db.c.aggregate({
    $match : {
        "sales.buyer" : "BuyerB"
    }
}, {
    $unwind : "$sales"
}, {
    $match : {
        "sales.buyer" : "BuyerB"
    }
}, {
    $group : {
        _id : "$_id",
        sales : {
            $push : "$sales"
        }
    }
});