【问题标题】:Find documents where value is not null查找值不为空的文档
【发布时间】:2018-11-20 22:09:02
【问题描述】:

我有以下文档结构

{
    "model" : {

    },
    "_id" : ObjectId("538df963d1c3f82329000257"),
    "email" : "sam@yahoo.com",
    "name" : "sam",
    "endpointarn" : "arn:aws:sns:us-east-1:284585229836:endpoint/GCM/Positivethinking/59eb7c66-c13c-3e44-af80-0b1f4f7ea9fd",
    "devregidtoken" : "APA91bFMOBo6ZWemMAG5clKEd5VYVvbeDOM5zNXjbbl3faSE0FZt3gtJYv0hpjdWuOY-mvr-k3sCcq0dEveCM6jx5mOh1u6JEubuUmKb2zU64dn_A4gJ4pCBG7AGQJ8DnkO83Ca4wgzsoJcio9T-TtA",
    "topicsubs" : [
        {
            "topicsubid" : "arn:aws:sns:us-east-1:284585229836:Wealth-ProsperityQuotes:5f3e8060-48fa-4a8e-bdc3-e9596747da1a",
            "topicname" : "Wealth-Prosperity",
            "topicno" : 0
        }
    ],
    "timecreated" : ISODate("2014-06-03T16:35:47.442Z"),
    "purchasedata" : {
        "orderid" : "111",
        "packagename" : "",
        "productid" : "",
        "purchasetime" : "",
        "purchasestate" : "",
        "developerpayload" : "",
        "purchasetoken" : ""
    },
    "ccode" : "",
    "ccodestat" : ""
}

我想获取所有 purchasedata.orderid 不为空的文档。我试过了

db.User.find({"purchasedata.orderid" : {$ne : ""}});

【问题讨论】:

标签: mongodb


【解决方案1】:

如果您正在检查null,您可以使用$ne 运算符:

db.User.find({
   "purchasedata.orderid" : { $ne : null }
});

注意:

OP 最初想检查该值是否不是空字符串 "" 并且不是 null。 null 和空字符串是两个不同的 BSON types。您可以使用$type$not 运算符来检查值在哪里null 以及密钥是否存在:

db.User.find({
   "purchasedata.orderid" : { 
      $not : { $type : 10 }, 
      $exists : true
   }
});

$type 运算符选择值为特定 BSON 类型的文档(10 对应于 Null)。 $exists 将检查密钥是否存在于子文档中。

【讨论】:

    【解决方案2】:

    你们很亲密。如果该值实际上为 null,则可以只使用“null”而不是空白。

    db.User.find({"purchasedata.orderid" : {$ne : null}});
    

    【讨论】:

      【解决方案3】:

      所以这就是最终对我有用的方法

      db.User.find({
         "purchasedata.orderid" : {
            $exists : true,
            $ne : ""
         }
      });
      

      @Christian p 很接近,所以我投了赞成票,但我认为我的问题是值不是 null 而是实际上是一个空字符串,同时检查值是否存在也很重要

      【讨论】:

      • 这不能回答问题。如果您想过滤 NULL,那么@ChristianP 的答案是正确的。
      猜你喜欢
      • 1970-01-01
      • 2022-01-09
      • 2021-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多