gpt4 book ai didi

python - mongoDB:对文档中的计算值执行 collection.find()

转载 作者:行者123 更新时间:2023-12-04 03:36:10 25 4
gpt4 key购买 nike

假设我在一个集合中有以下文档:

{
"_id" : ObjectId("111e2133c57a1d6111111111"),
"scores" : [
{
"date" : ISODate("2021-03-29T05:00:20.965Z"),
"test 1 points" : 50,
"test 2 points" : 10,
"total possible points" : 100
}
]
}

{
"_id" : ObjectId("111e2133c57a1d6111111222"),
"scores" : [
{
"date" : ISODate("2021-03-27T05:00:20.965Z"),
"test 1 points" : 30,
"test 2 points" : 20,
"total possible points" : 200
}
]
}

如果我想找到所有 ("test 1 points"+ "test 2 points")/"total possible points"大于 .50 的文档,有没有一种方法可以使用 MongoDB find( ) 命令?

目前,我使用的是循环遍历每个文档并执行计算的低效方法,如果计算值大于 .50,则记录 ObjectId。

提前致谢!

最佳答案

演示 - https://mongoplayground.net/p/c19Xx9-Ahb-

$unwind要进入单个文档的分数,请使用 $add $divide$gtvalidEntry 设为 true 或 false。

$match文档返回

db.collection.aggregate([
{ $unwind: "$scores" },
{
$addFields: {
validEntry: {
$gt: [
{ $divide: [
{ $add: [ "$scores.test 1 points", "$scores.test 2 points" ] },
"$scores.total possible points"
]
},
0.5]
}
}
},
{ $match: { validEntry: true } }
])

如果你想取回原始文档$group它们由 _id$push分数返回数组。

  {
$group: { _id: "_id", scores: { $push: "$scores" } }
}

https://mongoplayground.net/p/d8xhOHYV4kn

关于python - mongoDB:对文档中的计算值执行 collection.find(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66865688/

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