使用mongoose与Mongodb进行聚合

埃里克·阿罗约(Erick Arroyo)

嘿,我尝试使用moongose在mongodb上进行一些聚合:我得到了以下数据:

[
  {
    "school": "1",
    "preferences": [
      {
        "person": "X",
        "color": "A"
      },
      {
        "person": "X",
        "color": "B"
      },
      {
        "person": "Y",
        "color": "A"
      }
    ]
  },
  {
    "school": "2",
    "preferences": [
      {
        "person": "Z",
        "color": "A"
      },
      {
        "person": "Y",
        "color": "C"
      }
    ]
  }
]

我认为数据可以自我解释,当我查询匹配“ 1”的学校时,我想得到的结果是。我想得到这个结果:

[
  {
    "_id": "X",
    "colors": [
      "A",
      "B"
    ]
  },
  {
    "_id": "Y",
    "colors": ["A"]
  }
]

我以前使用过聚合,但是我无法弄清楚这一结果。

约格什

检查此聚合查询:

db.collectionName.aggregate({
  "$match": {
    "school": "1"
  }
}, {
  "$unwind": "$preferences"
}, {
  "$group": {
    "_id": "$preferences.person",
    "colors": {
      "$addToSet": "$preferences.color" // $addToSet used here only to add distinct color 
    }
  }
})

编辑如果您想计算color然后使用的组的数量,sum如下所示:

db.collectionName.aggregate({
  "$match": {
    "school": "1"
  }
}, {
  "$unwind": "$preferences"
}, {
  "$group": {
    "_id": "$preferences.color",
    "appears": {
      "$sum": 1
    }
  }
})

编辑

根据您的新要求,您应该执行以下聚合:

    db.collectionName.aggregate({
    "$unwind": "$preferences"
},
{
    "$group": {
        "_id": {
            "person": "$preferences.person",
            "color": "$preferences.color"
        },
        "count": {
            "$sum": 1
        }
    }
},
{
    "$group": {
        "_id": "$_id.person",
        "colors": {
            "$push": {
                "color": "$_id.color",
                "count": "$count"
            }
        }
    }
},
{
    "$project": {
        "_id": 0,
        "person": "$_id",
        "colors": 1
    }
}).pretty()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用 $or 和 $and 进行 MongoDB 聚合

使用 $sample 进行 MongoDB 聚合

Mongodb,使用$ lookup进行聚合查询

MongoDB:使用$ in进行编校的聚合失败

在MongoDB中使用对象数组进行聚合

MongoDB通过使用输入数组进行聚合

如何使用MongoDB聚合进行分页?

MongoDB:使用$ cond和$ regex进行聚合

MongoDB:使用嵌套的$ group进行聚合

在mongoDB / Mongoose上使用查找和聚合来获取数据

MongoDB/Mongoose 使用聚合获取对象数组属性的长度

mongoDB, mongoose - 聚合对象数组

MongoDB聚合vs Mongoose虚拟

MongoDB聚合中的Mongoose虚拟

如何使用mongoDB / mongoose聚合管道使用基于自定义字段的聚合值?

mongodb-使用$ lookup管道使用$ match $ in进行聚合

如何在MongoDB中对聚合查询结果进行分页并获得文档总数(Node.js + Mongoose)?

在Jmeter中使用groovy在mongoDB中进行查询聚合

InvalidPipelineOperator用于使用golang在mongodb中进行聚合和过滤

使用线性分布MongoDb聚合框架进行分组和求和

如何使用MongoDB聚合对多个操作进行分组

在Mongodb中使用聚合,查找和管道进行查询

使用 MongoDB 中的聚合框架进行分组和计数

如何使用 MongoDB 聚合进行分组和计数

使用Java驱动程序进行MongoDB聚合

使用mongodb进行查找聚合查询逆向(JOIN)

使用 MongoDB 按多个值对 Golang 进行聚合分组

MongoDB - 使用聚合对内部数组进行排序

使用 Jinja2 进行 Python Mongodb 聚合