在对象中查找数组元素

时间:2016-05-11 12:02:38

标签: mongodb nosql

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

我发现了容量':' 128GB'当我使用此查询时

db.getCollection('products').find({
    'features.en' : {
        $elemMatch : {
            'capacity' : {
                $in : ['128GB']
            }
        }
    }
})

但不取。 如果我查询' translatable':true

db.getCollection('products').find({
    'features.en' : {
        $elemMatch : {
            'translatable' : true
        }
    }
})

2 个答案:

答案 0 :(得分:2)

输入文档中有一个棘手的TYPO - 所以请检查容量最后是否有空格

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()

答案 1 :(得分:0)

你试过这个吗?

db.products.find({' features.en':{$ elemMatch:{' capacity':{$ elemMatch:{$ in:[' 128GB&# 39;]}}}}})