我想使用以下字段在 mongodb 中编写复杂的查询:
- 类
- 评分
- 小时
查询应该根据以下条件返回结果集:
1) class = "a"&& rate > "20000"
或
2) class = "b"&& (rate X hrs X 52) > "20000"
我试图查询的集合中的记录看起来像这样:
{
"_id": "3434sfsf",
"rate": "60",
"class": "a"
},
{
"_id": "sdsdsd",
"rate": "60",
"class": "b",
"hrs": "8"
}
我如何编写查询来实现我正在寻找的东西......谢谢!
最佳答案
请尝试以下查询:
第 1 步:我们仅过滤那些具有“class”:“a”或“class”:“b”和“hrs”键存在的文档。
第 2 步:我们将“rate”、“hrs”与 52 相乘并将结果存储在键“rateMultiply”
第 3 步:我们根据以下标准过滤文档:class = "a"&& rate > "20000"OR class = "b"&& (rate X 小时 X 52) > "20000"
第 4 步:我们正在显示仅包含我们需要的字段的文档网。
让我们创建一个集合“exp4”并插入以下文档:
db.exp4.insert({ "_id" : "3434sfsf", "rate" : 60, "class" : "a" });
db.exp4.insert({ "_id" : "sdsdsd", "rate" : 60, "class" : "b", "hrs" : 8 });
db.exp4.insert({ "_id" : "123", "rate" : 30000, "class" : "a", "hrs" : 8 });
db.exp4.insert({ "_id" : "12567", "rate" : 12000, "class" : "b" });
现在让我们查询集合:
db.exp4.aggregate([
{ $match:
{$or : [ {"class" : "a"},
{$and : [{"class":"b"},{"hrs": {"$exists" : 1}}]}
]
}
},
{ $project :
{ rateMultiply : { $multiply: ["$rate","$hrs",52]},
rate:1, class:1, hrs : 1
}
},
{ $match :
{$or : [
{ $and : [ {"class" : "a"} ,
{"rate" : {"$gt" : 20000}}
]
} ,
{ $and : [ {"class" : "b"},
{rateMultiply: {$gt:20000}}
]
}
]
}
},
{ $project: {class : 1 , rate : 1 , hrs : 1 }
}
])
结果:
{ "_id" : "sdsdsd", "rate" : 60, "class" : "b", "hrs" : 8 }
{ "_id" : "123", "rate" : 30000, "class" : "a", "hrs" : 8 }
关于mongodb - 在 mongoDB 中编写复杂查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31816342/