如何在嵌套结构集合中搜索"city"字段的值?
嵌套数组的查询方案
你的集合结构是两层嵌套数组(name数组包含带somethingelse数组的元素),针对city字段的查询可以用以下几种方式:
基础匹配(查找包含指定city值的文档)
直接使用点标记法即可匹配到所有包含目标city值的文档,语法如下:
db.yourCollectionName.find({ "name.somethingelse.city": "NY" })
如果之前尝试点标记法失败,检查下集合名称、字段名是否拼写正确,或者是否存在大小写不匹配的问题。
精确匹配(匹配同一嵌套元素内的多个条件)
如果需要同时匹配somethingelse数组元素里的多个字段(比如name和city),需要用$elemMatch逐层嵌套:
db.yourCollectionName.find({ "name": { "$elemMatch": { "somethingelse": { "$elemMatch": { "name": "John", "city": "NY" } } } } })
仅返回匹配的数组元素
如果不想返回整个文档,只需要获取包含目标city的somethingelse元素,可以在查询时指定投影:
db.yourCollectionName.find( {"name.somethingelse.city": "NY"}, {"name.somethingelse.$": 1} )
或者用聚合管道实现更灵活的结果筛选:
db.yourCollectionName.aggregate([ {$unwind: "$name"}, {$unwind: "$name.somethingelse"}, {$match: {"name.somethingelse.city": "NY"}}, {$project: {"name.somethingelse": 1, _id: 0}} ])
内容的提问来源于stack exchange,提问作者cryptoBLD
相关产品推荐
相关产品推荐

