"20000" 或 2) class = "b-6ren">
gpt4 book ai didi

mongodb - 在 mongoDB 中编写复杂查询

转载 作者:行者123 更新时间:2023-12-02 15:24:06 24 4
gpt4 key购买 nike

我想使用以下字段在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com