[英]Mongodb find in hash by value
我有此mongodb文件格式:
{
"_id": ObjectId("5406e4c49b324869198b456a"),
"phones": {
"12035508684": 1,
"13399874497": 0,
"15148399728": 1,
"18721839971": 1,
"98311321109": -1,
}
}
手机字段-它是电话号码和使用频率的哈希值。
而且我需要选择所有具有至少一个零或更少频率的文档。
试试这个:
db.my_collection.find({"phones": { $lte: 0} })
但没有运气。
预先感谢您的建议
您无法在MongoDB中进行这种查询,无论如何都不会以简单的方式进行,因为您在此处所做的通常是“反模式”,其中部分数据实际上被指定为“键”。 因此,更好的建模方法是使用“数据”实际上是键的值的东西,而不是相反的方式:
{
"_id": ObjectId("5406e4c49b324869198b456a"),
"phones": [
{ "number": "12035508684", "value": 1 },
{ "number": "13399874497", "value": 0 },
{ "number": "15148399728", "value": 1 },
{ "number": "18721839971", "value": 1 },
{ "number": "98311321109", "value": -1 },
}
}
然后,您的查询非常简单:
db.collection.find({ "phones.value": { "$lte": 0 } })
但是,否则,MongoDB无法“本地”遍历对象/哈希的“键”,并且为此,您需要执行JavaScript评估才能做到这一点。 对于性能而言,这不是一个好主意。 基本上是$where
简短形式的查询:
db.collection.find(function() {
var phones = this.phones;
return Object.keys(phones).some(function(phone) {
return phones[phone] <= 0;
})
})
因此,更好的选择是更改建模方式并利用本机运算符。 否则,大多数查询都需要对象/哈希中任何“键”的“显式”路径。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.