数据库集合中的文档格式如下
{
_id:1,
a: [{b:1, c:2, d:3}, {b:2, c:3, d:4}]
},
{
_id:2,
a: [{b:2, c:2, d:4}, {b:3, c:5, d:4}]
},
{
_id:3,
a: [{b:4, c:4, d:3}, {b:5, c:3, d:2}]
}
从上面的文件中我只需要获得'b!= 4'的文件,这意味着只有_id = 1&应返回_id = 2。
为此,我尝试了以下查询,但我没有得到预期的结果。相反,我得到了所有文件。
db.collectionname.find({a: {$nin: [{b: 4}]}})
任何替代解决方案,请帮帮我。
答案 0 :(得分:3)
$ne
而不是**$nin**
。
$ nin选择以下文件:
- 字段值不在指定的数组中 或
- 该字段不存在。
所以查询
db.collectionname.find({a: {$nin: [{b: 4}]}})
将查找数组a
不包含此确切文档的文档:{b: 4}
。这里有3个文档匹配,因为内部文档有b
和c
个键,而{b: 4}
没有。{1}}。
对于单个字段检查,您应该使用$ne
正确的查询是
db.collectionname.find({"a.b": {$ne: 4}})
返回:
{ "_id" : 1, "a" : [ { "b" : 1, "c" : 2, "d" : 3 }, { "b" : 2, "c" : 3, "d" : 4 } ] }
{ "_id" : 2, "a" : [ { "b" : 2, "c" : 2, "d" : 4 }, { "b" : 3, "c" : 5, "d" : 4 } ] }