簡體   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