如何在mongo中找到满足多个条件的文档?

时间:2018-01-27 00:07:28

标签: mongodb

我有一个mongo数据库,其中文档属于三种情况之一。他们是

let
  nixpkgs = import <nixpkgs> { };
...

我正在尝试查找与上述2)匹配的所有文档,并从这些文档中删除“somevalue”属性。

例如,以下是一些示例文档:

1)

1)  Don't have a key named "somevalue"
2)  Have "somevalue" but it is set to null
3)  Have "somevalue" but it is set to a valid value

2)

{
  "_id" : ObjectId("58214e9ebeac160006000003"),
  "name" : "Internal Stream"
}

3)

{
  "_id" : ObjectId("574382e6891ea20007000002"),
  "name" : "Stream 2"
  "somevalue" : null
}

在一个数据库中,我运行以下命令: db.getCollection('mycollection')。find({somevalue:{$ exists:true}})。count()

我得到38条记录。这告诉我这个集合中有38个文档与上述2)和3)相匹配。

如果我执行以下操作:
db.getCollection('mycollection')。find({somevalue:null})。count()

我得到了1859条似乎管理上述1)和2)的记录。

如何运行与“somevalue”字段存在且“somevalue”设置为null的文档匹配的查询?

在我看来,当密钥不存在或密钥存在且设置为null时,null匹配。

我要做的是删除所有存在但没有值的文档,以便在完成后,如果属性具有实际值,则集合中的文档只有属性。

我也使用db.version()对我的版本进行了双重检查 3.4.1

1 个答案:

答案 0 :(得分:0)

您可以使用$type运算符来消除缺少字段的空值。

类似

db.getCollection('mycollection').find({somevalue : {$type: "null"} })

db.getCollection('mycollection').find({somevalue : {$type: 10} })

对于removal,您可以尝试

db.getCollection('mycollection').deleteMany({somevalue : {$type: "null"} })