gpt4 book ai didi

mongodb - 获取数组中第一个元素的最大值?

转载 作者:可可西里 更新时间:2023-11-01 09:36:18 28 4
gpt4 key购买 nike

假设我有如下文件:

{
email: "test@test.com",
values: [2,9]
},
{
email: "test@test.com",
values: [1,3]
},
{
email: "another@email.com",
values: [4,5]
},

我想为每封电子邮件获取 values 数组中第一个元素的最大值(因此 2test@test.com。是否可以将 $max 仅应用于数组的第一个元素?我尝试了以下方法:

db.test.aggregate({$group:{_id: '$email', max: {$max: "$values[0]"}}})

db.test.aggregate({$group:{_id: '$email', max: {$max: "$values.0"}}})

但两者似乎都不起作用(它们返回 nullmax 的空数组)。这能做到吗?

最佳答案

关闭尝试,但不幸的是,聚合框架无法使用 .find() 等方法可用的标准投影形式。你必须更多地参与才能得到你想要的。

db.test.aggregate([
// Unwind the arrays
{ "$unwind": "$values" },

// Get the first value out of each document. Yes, order is respected.
{ "$group": {
"_id": "$_id",
"email": { "$first": "$email" },
"firstValue": { "$first": "$values" }
}},

// Then get "max" per grouping key
{ "$group": {
"_id": "$email",
"value": { "$max": "$firstValue" }
}}
])

这是有效的,因为 $first拉出“分组边界”上的“第一个”匹配项,并且在展开数组内容时遵守数组的顺序。

所以“第一个”$group stage 获取文档中的“第一个”数组元素。而“第二个”$group舞台表演 $max提取所有这些值后。

附言不要问如何获得“第 n 个”值,因为这完全是另一个问题,而且涉及更多。如果你遵循它,那么虽然这样做是合乎逻辑的。这不是最佳解决方案,但可以做到。

相信我,我们一直在寻找关于 $push 的“切片”预测和“限制”运营一段时间了。这可能有一天会发生。

关于mongodb - 获取数组中第一个元素的最大值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27824557/

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