在对象中查找数组元素

3
"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
        }
    }
})
2个回答

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

谢谢,你是对的,它没有工作是因为 TYPO。 - Mohammad Kashif Sulaiman

0

你试过这个吗?

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接