收集:
db.test.find()
{
{ "_id" : ObjectId(...), "arr" : [ "Today", "is", null ] }
{ "_id" : ObjectId(...), "arr" : [ null, null, null ] }
}
我试图查找所有arr
等于某个值的所有文档。在此示例中,我希望在给定arr : [null, null, null]
时包含null
的文档。
Find documents where ALL elements of an array have a specific value
这个解决方案接近我想要的;但是,我的数组数据没有$elemMatch
引用的键。有没有办法完成这个查询而不会造成不必要的代价或重组我的数据?
谢谢!
答案 0 :(得分:0)
您可以使用$all运算符,但语义可能不是您想要的。
db.test.find({ arr: { $all: [null] } })
这将返回两个测试文档。
如果你真的想查询一个包含3个空值的数组,你可以只查询文字数组:
db.test.find({arr:[null,null,null]})
答案 1 :(得分:0)
您可以使用$elemMatch
查询运算符。它只需要一个查询。
db.test.find( { arr: { $not: { $elemMatch: { $ne: null } } } } )
"$elemMatch" + "$ne"
此部分包括arr
数组中至少有一个空值的所有文档。
这些是至少有一个非空值的文件。
$not
此部分将保留所有不在"$elemMatch" + "$ne"
的文件。
这些是所有值均为null
的文档。
请适应不存在字段的边缘情况,以确保按预期工作。