繁体   English   中英

使用mongoose与Mongodb进行聚合

[英]Aggregation with Mongodb using mongoose

嘿,我尝试使用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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM