MongoDB数组查询:如何筛选未访问指定地点的文档
解决MongoDB筛选未访问指定地点文档的问题
首先,咱们先明确你的需求:从Profile集合中找出那些visitedPlaces数组里**完全不包含俄罗斯(Russia)和印度(India)**的文档。你之前尝试用$elemMatch可能方向偏了,因为$elemMatch是用来匹配数组中存在符合条件元素的场景,而咱们要的是完全不匹配的情况。
正确的查询语句
直接使用$nin操作符就能实现这个需求,它的作用是匹配字段(这里是数组字段)中没有任何元素属于指定数组的文档。具体语句如下:
db.Profile.find({ visitedPlaces: { $nin: ["India", "Russia"] } })
为什么这个能生效?
- 对于James的文档(
visitedPlaces: ['Germany', "Scotland"]):数组里的所有元素都不在["India", "Russia"]中,所以会被返回。 - 对于John的文档(
visitedPlaces: ['India', "Russia"]):数组里有元素在指定列表里,所以会被排除。
需要注意的细节
- 字段名大小写敏感:MongoDB的字段名是区分大小写的,你的示例里字段是
visitedPlaces(小写v),但你之前的查询写的是VisitedPlaces(大写V),这会导致查询不到数据,一定要保证字段名一致。 - 如果你的需求是“数组中不包含所有指定地点(即可以包含其中部分,但不能全包含)”,那逻辑会不一样,但根据你的描述,应该是完全不包含任何指定地点,所以上面的语句完全适用。
内容的提问来源于stack exchange,提问作者rasaq ganiu
相关产品推荐
相关产品推荐

