Найти документы, где значение не равно нулю
У меня есть следующая структура документа
{
"model" : {
},
"_id" : ObjectId("538df963d1c3f82329000257"),
"email" : "[email protected]",
"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 : ""}});
Ответы
Ответ 1
Если вы проверяете null
, вы можете использовать $ne:
db.User.find({
"purchasedata.orderid" : { $ne : null }
});
Старый ответ:
OP первоначально хотел проверить, что значение не является пустой строкой ", а не нулевой. null
и пустая строка - это два разных типы BSON. Вы можете использовать $type и $not операторам проверьте, где значение null
и что ключ существует:
db.User.find({
"purchasedata.orderid" : {
$not : { $type : 10 },
$exists : true
}
});
Оператор $type
выбирает документы, где это значение является конкретным типом BSON (10
соответствует null
). $exists
проверяет наличие ключа в поддокументе.
Ответ 2
Ты был очень близок. Если значение действительно пустое, вы можете просто использовать "null" вместо пустого.
db.User.find({"purchasedata.orderid" : {$ne : null}});
Ответ 3
Итак, вот что, наконец, помогло мне
db.User.find({
"purchasedata.orderid" : {
$exists : true,
$ne : ""
}
});
@Christian p был близок, поэтому я проголосовал, но я думаю, что моя проблема заключалась в том, что значение не было нулевой обратно на самом деле пустой строкой, а также проверяет, действительно ли значение существует