MongoDB如何基于数组中的对象筛选文档?
MongoDB 查询包含指定颜色预测的文档
针对你描述的文档结构,要筛选color predictions数组中包含目标颜色列表任一颜色的文档,有两种实现方式:
1. 固定颜色列表的查询语句
如果目标颜色是固定的(比如['Brown', 'Navy Blue']),可以直接用$or结合$elemMatch检查每个颜色是否存在于预测数组中:
db.yourCollectionName.find({ $or: [ { "color predictions": { $elemMatch: { Brown: { $exists: true } } } }, { "color predictions": { $elemMatch: { "Navy Blue": { $exists: true } } } } ] })
$elemMatch用于匹配数组中至少一个元素满足条件,这里检查元素是否包含指定颜色的键$exists: true确保该颜色键存在于预测元素中,无需关心对应数值的类型
2. 动态颜色列表的通用查询语句
如果目标颜色列表是动态生成的,用$expr结合聚合操作符实现更灵活的匹配:
// 定义目标颜色列表 const targetColors = ['Brown', 'Navy Blue']; db.yourCollectionName.find({ $expr: { $anyElementTrue: { $map: { input: "$color predictions", as: "predItem", in: { $in: [ // 提取当前预测元素的颜色键(每个元素只有一个键) { $arrayElemAt: [ { $objectKeys: "$$predItem" }, 0 ] }, targetColors ] } } } } })
$objectKeys提取每个预测元素的键(即颜色名称)$arrayElemAt取第一个键(因为每个预测元素只有一个颜色键值对)$in判断提取的颜色是否在目标列表中$map将数组每个元素转换为布尔值,$anyElementTrue只要有一个元素匹配就返回该文档
注意:将上述代码中的yourCollectionName替换为你的实际集合名称。
内容的提问来源于stack exchange,提问作者AynonT
相关产品推荐
相关产品推荐

