MongoDB查找所有数组元素都等于某个值的Documents

时间:2017-04-24 17:45:04

标签: mongodb

收集:

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引用的键。有没有办法完成这个查询而不会造成不必要的代价或重组我的数据?

谢谢!

2 个答案:

答案 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的文档。

请适应不存在字段的边缘情况,以确保按预期工作。