gpt4 book ai didi

mongodb - 在所有文档的基于数组的字段中填充唯一项的计数

转载 作者:可可西里 更新时间:2023-11-01 10:42:11 27 4
gpt4 key购买 nike

我有文档将 category 字段作为字符串数组,例如

{ name: "aaa", categories: ["apple","banana","peach"] },
{ name: "bbb", categories: ["apple","orange" },
{ name: "ccc", categories: ["apple","peach"] }
...

在结果中,我需要有一个对象数组,该对象数组具有类别中每个唯一值的聚合值和该类别的出现次数,如下所示:

[
{ category: "apple", qty: 3 },
{ category: "banana", qty: 1 },
{ category: "peach", qty: 2 },
{ category: "orange", qty: 1 }
]

我已经尝试了下面的方法,但是它在结果中产生了空数组

SomeCollection.native(function(err, collection) {
collection.aggregate([
{ $group: { _id: "$categories", name: { $addToSet: "$categories._type" } } },
{ $unwind: "$categories" },
{ $group : { _id : "$categories", count: { $sum : 1 } } }
], function(error, result) {
sails.log.info('result:', result);
});
});

我哪里错了?

最佳答案

它返回一个空结果,因为您的第一个管道步骤是 $group 管道操作本质上是通过 categories 数组对集合中的所有文档进行分组,同时您将数组类型添加到该特殊组中的数组。当您应用 $unwind 时,结果为空 运算符到一个不存在的数组字段(因为之前的 $group 运算符管道不会产生新的 categories 字段,只有键 _idname)。

您首先要展平categories 数组,这样它将为 $unwind 所在的类别数据字段的每个元素生成一条新记录。 已应用。现在您可以应用 $group 操作得到想要的结果:

考虑以下方法:

SomeCollection.native(function(err, collection) {
collection.aggregate([
{ $unwind: "$categories" },
{ $group: { _id: "$categories", qty: { $sum : 1 } } }
], function(error, result) {
sails.log.info('result:', result);
});
});

关于mongodb - 在所有文档的基于数组的字段中填充唯一项的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37828665/

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