我有以下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但实际上是一个空字符串,也检查值是否存在是重要的
| 归档时间: |
|
| 查看次数: |
51083 次 |
| 最近记录: |