gpt4 book ai didi

mongoDB 有没有办法让聚合 $gte 不显示错误数据

转载 作者:行者123 更新时间:2023-12-04 12:01:37 28 4
gpt4 key购买 nike

https://docs.mongodb.com/manual/reference/operator/aggregation/gte/

正如您在上面的 mongo db 文档中看到的,$gte 也返回了错误的数据。

示例 json 数据:

{ "_id" : 1, "item" : "abc1", description: "product 1", qty: 300 }
{ "_id" : 2, "item" : "abc2", description: "product 2", qty: 200 }
{ "_id" : 3, "item" : "xyz1", description: "product 3", qty: 250 }
{ "_id" : 4, "item" : "VWZ1", description: "product 4", qty: 300 }
{ "_id" : 5, "item" : "VWZ2", description: "product 5", qty: 180 }

查询获取qty大于250的数据:
db.inventory.aggregate(
[
{
$project:
{
item: 1,
qty: 1,
qtyGte250: { $gte: [ "$qty", 250 ] },
_id: 0
}
}
]
)

输出:
{ "item" : "abc1", "qty" : 300, "qtyGte250" : true }
{ "item" : "abc2", "qty" : 200, "qtyGte250" : false }
{ "item" : "xyz1", "qty" : 250, "qtyGte250" : true }
{ "item" : "VWZ1", "qty" : 300, "qtyGte250" : true }
{ "item" : "VWZ2", "qty" : 180, "qtyGte250" : false }

问题:
好吧,我想要数量 > 250 的数据,但 mongo db 显示所有数据,因此当记录数量如此之多时,站点变得如此缓慢。

我在带有 mongoid 的 rails 上使用 ruby​​,我有一些需要使用 group by 子句的查询,所以我必须聚合,但这是返回所有数据。
我的原始查询:
data = SomeModel.collection.aggregate([
{"$project" => {
"dayOfMonth" => {"$dayOfMonth" => "$created_time"},
"month" => {"$month" => "$created_time"},
"year" => {"$year" => "$created_time"},
"date_check_gte" => {"$gte" => ["$created_time",start_time]},
"date_check_lte" => {"$lte" => ["$created_time",end_time]},
}},
{"$group" => {
"_id" => { "dayOfMonth" => "$dayOfMonth", "month" => "$month", "year" => "$year"},
"Total" => {"$sum" => 1},
"check_one" => {"$first" => "$date_check_gte"},
"check_two" => {"$first" => "$date_check_lte"}
}},
{"$sort" => {
"Total" => 1
}}
])

尽管使用了 gte 和 lte,但可以完美地分组但返回所有数据。
有什么办法可以避免出现虚假数据?

最佳答案

获取数量大于 250 的数据的“查询”涉及 $match 过滤文档以仅将符合指定条件的文档传递到下一个管道阶段的管道运算符,而不是 $project 您目前正在做的管道:

db.inventory.aggregate([
{ "$match": { "qty": { "$gte": 250 } } }
)

或使用相同的 $project 管道(虽然没有必要,因为只使用一个 $match 管道就足够了):
db.inventory.aggregate([
{
"$project": {
"item": 1,
"qty": 1,
"qtyGte250": { "$gte": [ "$qty", 250 ] },
"_id": 0
}
},
{ "$match": { "qtyGte250": true } }
])

关于mongoDB 有没有办法让聚合 $gte 不显示错误数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39344913/

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