Mongodb 如何在mongo中计算数组元素

Mongodb 如何在mongo中计算数组元素,mongodb,Mongodb,我知道有很多话题都在谈论这一点,但我不知道我的实现中出现了什么问题 我有以下文件: { "_id" : ObjectId("510a353929e16756d5000009"), "skills" : [ [ "UserEmbed::Author::Skills::Copywriting", "UserEmbed::Author::Skills::Proofreading", "UserEmbed::Author::Skills::Proofr

我知道有很多话题都在谈论这一点,但我不知道我的实现中出现了什么问题

我有以下文件:

{
  "_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"
    ]
  ]
}
{
  "_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
}
我想要这样的东西:

{
  "UserEmbed::Author::Skills::Copywriting": 1,    
  "UserEmbed::Author::Skills::Proofreading": 2,
  "UserEmbed::Author::Skills::Translation": 3
}
以下是我所拥有的(第一个
$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

你知道我如何按照第一个id对结果进行分组吗?我不明白你的意思。。。按
\u id
分组?我算出了,想按初始
\u id
分组。那是不是
\u id:{user\u id:$\u id',键入:$skills}
"result" : [
        {
            "_id" : "UserEmbed::Author::Skills::Translation",
            "count" : 3
        },
        {
            "_id" : "UserEmbed::Author::Skills::Proofreading",
            "count" : 2
        },
        {
            "_id" : "UserEmbed::Author::Skills::Copywriting",
            "count" : 1
        }
    ],
"ok" : 1