为了我的一生,我不知道如何在MongoDB中编写此查询!
我需要从查询中返回行,其中最大“修订”是为某项返回的行
我分为两个部分:
这是一个示例集(在我们的实际数据中,我们有约40列和可能的数百万行):
ABCD修订 -------- + ------- + ------- + ------- + ------------ Item1 100200 300 1 项目1 111 222 333 2 项目2 200 500 800 1 项目2 222 555 888 2 项目2 223 556 889 3 项目3 300 600 900 1 项目4 400 700 1000 1
我需要退货的内容:
ABCD修订 -------- + ------- + ------- + ------- + -------- Item1 111222333 2 Item2223 556889 3 项目3300600900 1项目44007001000 1
我一直在尝试许多组合或$group
,$count
甚至尝试使用SQL到MongoDB查询翻译工具,但似乎无法使其工作。
请帮助,并提前感谢!
请尝试以下查询:
db.collection.aggregate([
{
$group: {
_id: "$A",
A: { $first: "$A" },
B: { $max: "$B" },
C: { $max: "$C" },
D: { $max: "$D" },
Revision: { $max: "$Revision" },
}
},
{
$project: { _id: 0 },
},
{
$group: {
_id: "",
count: { $sum: 1 },
data: { $push: "$$ROOT" }
}
}
]);
测试: mongoplayground
因此,在该data
字段中,您将拥有实际的文档,其中的数量代表集合中唯一ID的数量'A'
。
如果您不希望结果以这种方式出现,则可以尝试以下查询:
db.collection.aggregate([
{
$group: {
_id: "$A",
A: { $first: "$A" },
B: { $max: "$B" },
C: { $max: "$C" },
D: { $max: "$D" },
Revision: { $max: "$Revision" },
}
},
{
$project: { _id: 0 },
}
])
测试: mongoplayground
它会返回一个对象数组,因为聚合将始终返回一个游标,该游标将被解析为代码中的数组,然后您可以.length
对数组执行操作以获取总计数,而不是$group
在第一查询中使用第二阶段仅获得总计数另一个选择。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句