首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在mongo中计算数组元素

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

Stack Overflow用户
提问于 2013-07-09 18:21:32
回答 1查看 3.7K关注 0票数 4

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

我有以下文件:

代码语言:javascript
复制
{
  "_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"
    ]
  ]
}

我想要这样的东西:

代码语言:javascript
复制
{
  "UserEmbed::Author::Skills::Copywriting": 1,    
  "UserEmbed::Author::Skills::Proofreading": 2,
  "UserEmbed::Author::Skills::Translation": 3
}

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

代码语言:javascript
复制
aggregate([ { $group: { _id: "$_id", skills: { $addToSet : "$author_profile.skills._type" } } }, { $unwind : "$skills" }, { $group : { _id : "$skills", count: { $sum : 1 } } }])

它返回类似如下的内容(与其他文档一起):

代码语言:javascript
复制
{
  "_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似乎不能正常工作。我是不是误解了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-09 20:43:55

如果您的文档包含一个数组数组,则需要为$skills引入第二个$unwind

代码语言:javascript
复制
db.so.aggregate([
    { $group: { _id: "$_id", 
        skills: { $addToSet : "$author_profile.skills._type" }}},
    { $unwind : "$skills" }, 
    { $unwind: "$skills" },
    { $group : { _id : "$skills", count: { $sum : 1 } } }])

产生:

代码语言:javascript
复制
"result" : [
        {
            "_id" : "UserEmbed::Author::Skills::Translation",
            "count" : 3
        },
        {
            "_id" : "UserEmbed::Author::Skills::Proofreading",
            "count" : 2
        },
        {
            "_id" : "UserEmbed::Author::Skills::Copywriting",
            "count" : 1
        }
    ],
"ok" : 1
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17545764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档