MongoDB统计property_type为House且含Changing table文档返回0问题
原查询存在的问题
- 参数位置错误:MongoDB的
find()方法第一个参数为查询过滤条件,第二个参数为返回字段的投影配置,你将两个过滤条件拆分传入两个参数,第二个amenities的匹配条件被当成了投影规则,完全没有生效。 - 匹配值语法错误:你在要匹配的字符串
House和Changing table前都加了多余的$前缀,加$后MongoDB会将其识别为字段引用,而非你要匹配的固定字符串值,自然匹配不到任何结果。 - 数组匹配逻辑错误:
amenities是数组类型,用$eq匹配只会命中整个数组完全等于目标值的文档,无法匹配数组中包含该元素的场景。
修正后的查询语句
直接将两个过滤条件合并到同一个查询对象中,数组包含指定元素直接填写字段名和目标值即可,推荐优先使用countDocuments()做统计,结果比count()更稳定准确:
db.listingsAndReviews.countDocuments({ "property_type": "House", "amenities": "Changing table" })
如果需要兼容更复杂的数组匹配场景,也可以用$in写法,效果一致:
db.listingsAndReviews.countDocuments({ "property_type": { $eq: "House" }, "amenities": { $in: ["Changing table"] } })
内容的提问来源于stack exchange,提问作者Anita
相关产品推荐
相关产品推荐

