使用MongoDB检查字段是否存在

4uqofj5v  于 2022-11-03  发布在  Go
关注(0)|答案(8)|浏览(218)

因此,我尝试查找所有设置了字段且字段不为空的记录。
我尝试使用$exists,但是根据MongoDB documentation,,此查询将返回等于null的字段。
$exists与包含存储空值的字段的文档匹配。
所以我现在假设我必须这样做:

db.collection.find({ "fieldToCheck" : { $exists : true, $not : null } })

然而,每当我尝试这样做时,我都会得到错误[invalid use of $not]。有人知道如何查询吗?

olhwl3o2

olhwl3o21#

使用$ne(表示“不相等”)

db.collection.find({ "fieldToCheck": { $ne: null } })
iyr7buue

iyr7buue2#

假设我们有一个如下所示的集合:

{ 
  "_id":"1234"
  "open":"Yes"
  "things":{
             "paper":1234
             "bottle":"Available"
             "bottle_count":40
            } 
}

我们想知道瓶场是否存在?
回答:

db.products.find({"things.bottle":{"$exists":true}})
vsnjm48y

vsnjm48y3#

我发现这对我很有效

db.getCollection('collectionName').findOne({"fieldName" : {$ne: null}})
mnowg1ta

mnowg1ta4#

此注解编写于2021,适用于MongoDB 5.X和更早版本。
如果您重视查询性能****,则永远不要使用$exists(或仅在查询的字段上具有稀疏索引时使用)。稀疏索引应与查询的条件匹配,即如果搜索**$exists:true**,则稀疏索引应在字段上:{$exists:true},如果您查询**$exists:true**,则稀疏索引应在字段上:{$exists:false}
请用途:

db.collection.find({ "fieldToCheck": {  $ne: null } })

db.collection.find({ "fieldToCheck": {  $eq: null } })

这将要求您在集合的每个文档中包含fieldToCheck,但是,性能将得到极大的提高。

khbbv19g

khbbv19g5#

db.<COLLECTION NAME>.find({ "<FIELD NAME>": { $exists: true, $ne: null } })
plicqrtu

plicqrtu6#

我尝试将其转换为布尔条件,其中如果具有表名的文档已存在,则它将追加到同一文档中,否则它将创建一个。
table_name是我试图用来查找文档的变量

query = { table_name : {"$exists": "True"}}

    result = collection.find(query)
    flag = 0
    for doc in result:
        collection.update_one({}, { "$push" : { table_name : {'name':'hello'} } } )
        flag = 1
    if (flag == 0):
        collection.insert_one({ table_name : {'roll no' : '20'}})
2vuwiymt

2vuwiymt7#

聚集体示例
https://mongoplayground.net/p/edbKil4Zvwc

db.collection.aggregate([
  {
    "$match": {
      "finishedAt": {
        "$exists": true
      }
    }
  },
  {
    "$unwind": "$tags"
  },
  {
    "$match": {
      "$or": [
        {
          "tags.name": "Singapore"
        },
        {
          "tags.name": "ABC"
        }
      ]
    }
  },
  {
    "$group": {
      "_id": null,
      "count": {
        "$sum": 1
      }
    }
  }
])
brccelvz

brccelvz8#

在我的例子中,我只将新字段isDeleted : true添加到已删除的字段中。
因此,对于所有其他记录,没有isDeleted字段,所以我想获取isDeleted不存在或为false的所有字段。

.find({ isDeleted: { $ne: true } });

相关问题