Mongo选择子元素匹配的对象

时间:2015-10-28 14:39:14

标签: mongodb mongodb-query

我有这个mongo结构:

   my_object {
    "_id" : ObjectId("5630c996b707fd090c060f21"),
    "local" : "FR-fr",
    "ARTD" : [
        {
            "id" : 0,
            "mot" : "le",
            "v_path" : ""
        },
        {
            "id" : 1,
            "mot" : "la",
            "v_path" : ""
        }
    ],
    "ARTG" : [
        {
            "id" : 2,
            "mot" : "ce",
            "v_path" : ""
        }
    ],
    "SUSU" : [ ],
    "RECS" : [ ],
    "SUBS" : [ ],
    "VT" : [ ],
    "PREP" : [ ]
}

我想通过id检索一个对象, 例如:如果给出id 0,我想:

{
        "id" : 0,
        "mot" : "le",
        "v_path" : ""
}

如果给出id 2,我想:

{
        "id" : 2,
        "mot" : "ce",
        "v_path" : ""
}

所以,我想找到对象的任何地方(在ARTD或ARTG ......等)

我可以在mongo shell中使用什么命令?

此致

1 个答案:

答案 0 :(得分:0)

您可以尝试使用 $or 运算符进行查询,并使用 $elemMatch 投影特定的数组元素。使用 find() forEach() 方法中迭代光标以访问生成的文档,检查字段并访问匹配字段的数组元件。以下内容针对id 1:

进行了演示
var id = 1,
    query = {
        "$or": [
            { "ARTD.id": id },
            { "ARTG.id": id }
        ]
    },
    projection = {
        "ARTD": {
            "$elemMatch": { "id": id }
        },
        "ARTG": {
            "$elemMatch": { "id": id }
        }
    };
db.collection.find(query, projection).forEach(function (doc){
    var result = {}, key; 
    ["ARTD", "ARTG"].forEach(function(key) {
        if (doc.hasOwnProperty(key)) {
            result = doc[key][0];
        }
    });
    printjson(result);
})

示例输出:

{ "id" : 1, "mot" : "la", "v_path" : "" }