gpt4 book ai didi

mongodb - 如何计算mongo中的数组元素

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

我知道有很多话题都在讨论这个问题,但我无法弄清楚我的实现过程中出了什么问题。

我有以下文件:

{
"_id" : ObjectId("510a353929e16756d5000009"),
"skills" : [
[
"UserEmbed::Author::Skills::Copywriting",
"UserEmbed::Author::Skills::Proofreading",
"UserEmbed::Author::Skills::Proofreading",
"UserEmbed::Author::Skills::Translation",
"UserEmbed::Author::Skills::Translation",
"UserEmbed::Author::Skills::Translation"
]
]
}

我想要这样的东西:

{
"UserEmbed::Author::Skills::Copywriting": 1,
"UserEmbed::Author::Skills::Proofreading": 2,
"UserEmbed::Author::Skills::Translation": 3
}

这是我所拥有的(第一个 $group 是从我的原始文档结构中获取上面的文档):

aggregate([ { $group: { _id: "$_id", skills: { $addToSet : "$author_profile.skills._type" } } }, { $unwind : "$skills" }, { $group : { _id : "$skills", count: { $sum : 1 } } }])

它返回这样的东西(与其他文件):

{
"_id" : [
"UserEmbed::Author::Skills::Copywriting",
"UserEmbed::Author::Skills::Copywriting",
"UserEmbed::Author::Skills::Copywriting",
"UserEmbed::Author::Skills::Translation",
"UserEmbed::Author::Skills::Translation",
"UserEmbed::Author::Skills::Translation"
],
"count" : 1
}

$group 似乎没有正常工作。我是不是误会了什么?

最佳答案

鉴于您的文档包含一个数组数组,您需要为 $skills 引入第二个 $unwind:

db.so.aggregate([
{ $group: { _id: "$_id",
skills: { $addToSet : "$author_profile.skills._type" }}},
{ $unwind : "$skills" },
{ $unwind: "$skills" },
{ $group : { _id : "$skills", count: { $sum : 1 } } }])

产生:

"result" : [
{
"_id" : "UserEmbed::Author::Skills::Translation",
"count" : 3
},
{
"_id" : "UserEmbed::Author::Skills::Proofreading",
"count" : 2
},
{
"_id" : "UserEmbed::Author::Skills::Copywriting",
"count" : 1
}
],
"ok" : 1

关于mongodb - 如何计算mongo中的数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17545764/

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