Mongo - 查询内部数组

时间:2014-01-04 19:57:27

标签: mongodb

我有这个数据库结构

{
"_id": 107,
"standard": {"name": "building",
               "item": [{"code": 151001,
                          "quantity": 10,
                          "delivered": 8,
                          "um": "kg" },
                          {"code": 151001,
                          "quantity": 20,
                          "delivered": 6,
                          "um": "kg" }]
              }
}

我想找到所有包含代码的对象:151001,只显示已交付的字段。

例如,它会显示如下内容:

{delivered: 8}
{delivered: 6}

到目前为止,我得到了这个查询,但它没有准确显示我想要的内容:

db.test.find(
        {
            "standard.item.code": 151001
        }
        ).pretty()

1 个答案:

答案 0 :(得分:3)

由于您的商品位于数组中,因此最好的方法是使用Aggregation Framework

示例代码:

db.test.aggregate(
    // Find matching documents (could take advantage of an index)
    { $match: {
        "standard.item.code" : 151001,
    }},

    // Unpack the item array into a stream of documents
    { $unwind: "$standard.item" },

    // Filter to the items that match the code
    { $match: {
        "standard.item.code" : 151001,
    }},

    // Only show the delivered amounts
    { $project: {
        _id: 0,
        delivered: "$standard.item.delivered"
    }}
)

结果:

{
    "result" : [
        {
            "delivered" : 8
        },
        {
            "delivered" : 6
        }
    ],
    "ok" : 1
}

您会注意到聚合中有两个$match步骤。第一种是匹配包含该项目代码的文档。在数组上使用$unwind后,使用该代码对的第二个$match限制。