查找值不为null的文档

Jas*_*son 20 mongodb

我有以下doc结构

{
    "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" : ""
}
Run Code Online (Sandbox Code Playgroud)

我想得到所有文件,其中purchaseata.orderid不是NULL.我试过了

db.User.find({"purchasedata.orderid" : {$ne : ""}});
Run Code Online (Sandbox Code Playgroud)

Chr*_*n P 37

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

db.User.find({
   "purchasedata.orderid" : { $ne : null }
});
Run Code Online (Sandbox Code Playgroud)

注意:

OP最初想要检查该值是否为空字符串""而不是null.null和空字符串是两种不同的BSON类型.您可以使用$ type$ not运算符来检查值的位置null以及密钥是否存在:

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

$type操作者选择文件,其中的值是一个特定类型的BSON(10对应于Null).$exists将检查该子文档中是否存在该键.


vin*_*tic 24

你非常接近.如果该值实际为null,则可以使用"null"而不是空白.

db.User.find({"purchasedata.orderid" : {$ne : null}});
Run Code Online (Sandbox Code Playgroud)


Jas*_*son 13

所以这最终对我有用

db.User.find({
   "purchasedata.orderid" : {
      $exists : true,
      $ne : ""
   }
});
Run Code Online (Sandbox Code Playgroud)

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

  • 这不能回答问题。如果要过滤NULL,则@ChristianP的答案是正确的。 (2认同)