MongoDB如何筛选含动态键数组对象中存在image字段的文档
筛选包含image字段的文档解决方案
针对你这种post字段存在动态命名键的情况,可以利用MongoDB的表达式操作符实现筛选,具体查询语句如下:
db.collection.find({ $expr: { $gt: [ { $size: { $filter: { input: { $objectToArray: "$post" }, cond: { $anyElementTrue: { $map: { input: "$$this.v", as: "item", in: { $ifNull: ["$$item.image", false] } } } } } } }, 0 ] } })
代码说明:
$objectToArray: "$post":将post对象转换为键值对数组,结构类似[{k: "dynamicone", v: [...]}, {k: "comments", v: [...]}]$filter:遍历转换后的数组,筛选出符合条件的键值对$anyElementTrue配合$map:检查每个动态键对应的数组中,是否存在包含image字段的元素($ifNull会在元素有image字段时返回对应值,否则返回false,只要有一个元素满足就返回true)$size与$gt:判断筛选后的数组长度大于0,说明文档中存在符合要求的动态键及image字段
执行该查询后,会返回前两个包含image字段的文档,排除后两个无image字段的文档。
内容的提问来源于stack exchange,提问作者Agent Smith
相关产品推荐
相关产品推荐

