查询MongoDB以匹配和分组嵌套数组

时间:2016-05-24 07:02:30

标签: mongodb multidimensional-array

我有这样的结构文件:

// my structure
{
    "_id": ObjectId("5710e8d017487952a074027c"),
    "ID": "W1",
    "judul": "Candi Prambanan",
    "jenis": "Candi",
    "lokasi": [ 
        { "prov": "Yogyakarta" }, 
        { "kota": "Sleman" }
    ],
    "deskrip": "Candi Prambanan terletak di lingkungan Taman."
}

现在我尝试使用mongodb的聚合查询,如下所示:

// query 1
db.wisata.aggregate([
    {"$unwind": "$lokasi"},
    {"$match": {
        "lokasi.kota": { "$exists": true, "$ne": null }
    }},
    {"$group": { _id: "$lokasi.kota"}}
])
//result
{
    "result": [ 
        {"_id": "Kampar" }, 
        {"_id": "Magelang"}, 
        {"_id": "Bantul"}, 
        {"_id": "Sleman"}
    ],
    "ok": 1
}

我希望将匹配用于这样的标准:

//query 2
db.wisata.aggregate([
    {"$match": { 
       "lokasi.prov": "Yogyakarta"
    }},
    {"$group": {_id:"$lokasi.kota"}}
])
//result
{
    "result": [ 
        {"_id": ["Bantul"]}, 
        {"_id": ["Sleman"]}
    ],
    "ok": 1
}

问题我如何使用我的标准,如查询2,但我得到的结果像查询1,我尝试这样:

//query 3
db.wisata.aggregate([
    {"$unwind": "$lokasi"},
    {"$match": { 
        "lokasi.prov": "Yogyakarta"
    }},
    {"$group": {_id:"$lokasi.kota"}}
])
//result
{
    "result" : [
        {"_id" : null}
    ],
    "ok" : 1
}

但结果是null,请帮助我们,非常感谢...

1 个答案:

答案 0 :(得分:2)

尝试以下聚合查询:

db.wisata.aggregate([
    {"$match": {"lokasi.prov": "Yogyakarta"}}, 
    {"$group": {"_id": "$lokasi.kota"}},
    {"$unwind": "$_id"}
])