查询MongoDB集合

时间:2017-04-19 14:11:59

标签: mongodb collections mongodb-query aggregation-framework

鉴于以下三个MongoDB集合:

db.array.insertMany([{
    "field_1": [
        {
            "field_11": [{
                "field_22": "Left field_23 Far",
                "field_23": "Right field_23"
            }],
            "field_12": [{
                "field_22": "Left field_23 Far",
                "field_23": "Right field_23"
            }],
            "field_13": [{
                "field_22": "Left field_23 Far",
                "field_23": "Left field_23"
            }],
            "field_14": [{
                "field_23": "Left field_23",
                "field_22": "Left field_23 Far"
            }]
        }
    ]
}])

db.noArray.insertMany([{
    "field_1":
    {
        "field_11": [{
            "field_22": "Left field_23 Far",
            "field_23": "Right field_23"
        }],
        "field_12": [{
            "field_22": "Left field_23 Far",
            "field_23": "Right field_23"
        }],
        "field_13": [{
            "field_22": "Left field_23 Far",
            "field_23": "Left field_23",

        }],
        "field_14": [{
            "field_23": "Left field_23",
            "field_22": "Left field_23 Far"
        }]
    }
}])

db.noArrayArray.insertMany([{
    "field_1":
    {
        "field_11": {
            "field_22": "Left field_23 Far",
            "field_23": "Right field_23"
        },
        "field_12": {
            "field_22": "Left field_23 Far",
            "field_23": "Right field_23"
        },
        "field_13": {
            "field_22": "Left field_23 Far",
            "field_23": "Left field_23"
        },
        "field_14": {
            "field_23": "Left field_23",
            "field_22": "Left field_23 Far"
        }
    }
}])

我想分别查询每个集合并提取" field_11"。三个集合中每个集合的结果应该相同。预期的输出是:

"field_11": {
            "field_22": "Left field_23 Far",
            "field_23": "Right field_23"}

提前感谢您的技术专长

1 个答案:

答案 0 :(得分:1)

您可以尝试以下每个集合的聚合查询。使用$arrayElemAt将位置的数组字段转换为文档。

db.array.aggregate({$project:{_id:0, field_11:{$arrayElemAt:[{$arrayElemAt:["$field_1.field_11", 0]}, 0]}}});

db.noArray.aggregate({$project:{_id:0, field_11:{$arrayElemAt:["$field_1.field_11", 0]}}});

db.noArrayArray.aggregate({$project:{_id:0, field_11:"$field_1.field_11"}});

您还可以对所有馆藏使用db.collectionname.distinct("field_1.field_11")获取如下所示的响应

[ { "field_22" : "Left field_23 Far", "field_23" : "Right field_23" } ]