我有以下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}
}
}
})
答案 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"可以更好地表达常规数组检查或单个属性匹配。