使用$或和$ elemMatch进行mongodb查询

时间:2015-10-28 12:15:13

标签: mongodb mongodb-query

我有以下2个文件,我需要搜索是否有任何文件在图像阵列中有4x4或3x3。

{
    "images" : [ 
        {
            "4x4" : {
                "path" : "4-1.jpg"
            },
            "2x2" : {
                "path" : "2-1.jpg"
            }
        }
    ]
}
{
        "images" : [ 
        {
            "3x3" : {
                "path" : "3-1.jpg"
            }
        }
    ]
}

我有以下mongodb查询。但似乎无法一起使用$或$ elemMatch。

db.getCollection('images').find({
    "images" : {
        $elemMatch : {
            "4x4" : {$exists :  true}
        }
    }
    })

1 个答案:

答案 0 :(得分:5)

你当然可以这样写:

db.images.find({
    "images": {
        "$elemMatch": {
            "$or": [
                { "4x4": { "$exists": true } },
                { "3x3": { "$exists": true } }
            ]
        }
    }
})

但是你没必要,因为你基本上可以这样写:

db.images.find({
    "$or": [
        { "images.4x4": { "$exists": true } },
        { "images.3x3": { "$exists": true } }
    ]
})

$elemMatch运算符通常仅在需要多个条件匹配数组“元素”时才需要。使用"dot notation"可以更好地表达常规数组检查或单个属性匹配。