我有以下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" : ""
}
我想得到所有的文件,其中purchaseata.orderid不是NULL。我试过了
db.User.find({"purchasedata.orderid" : {$ne : ""}});
答案 0 :(得分:33)
如果您要检查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
将检查子文档中是否存在密钥。
答案 1 :(得分:24)
你非常接近。如果该值实际为null,则可以使用“null”而不是空白。
db.User.find({"purchasedata.orderid" : {$ne : null}});
答案 2 :(得分:8)
所以这最终对我有用
db.User.find({
"purchasedata.orderid" : {
$exists : true,
$ne : ""
}
});
@Christian p很接近,所以我投了票,但我认为我的问题是价值不是空的,但实际上是一个空字符串,同时检查价值是否存在是重要的