"features" : {
    "en" : [
        {
            "translatable" : true,
            "capacity " : [
                "128GB",
                "256GB"
            ]
        },
        {
            "translatable" : true,
            "material  " : [
                "Glass",
                "Aluminium"
            ]
        }
    ]
}

我在使用此查询时发现 'capacity': '128GB'
db.getCollection('products').find({
    'features.en' : {
        $elemMatch : {
            'capacity' : {
                $in : ['128GB']
            }
        }
    }
})

但不取。
如果我查询 'translatable':true
db.getCollection('products').find({
    'features.en' : {
        $elemMatch : {
            'translatable' : true
        }
    }
})

最佳答案

您的输入文档中有一个棘手的 TYPO - 所以请检查 capacity 末尾是否有空格

db.prod.aggregate([{
            $match : {
                "features.en.capacity " : "128GB"
            }
        },
    ]).pretty()

要仅获取满足您的条件的数组元素,您可以使用此聚合查询:
db.prod.aggregate([{
            $unwind : "$features.en"
        }, {
            $match : {
                "features.en.translatable" : true
            }
        }, {
            $match : {
                "features.en.capacity " : "128GB"
            }
        },
    ]).pretty()

关于mongodb - 在对象中查找数组元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37162088/

10-11 19:13