簡體   English   中英

MongoDB 用一組對象聚合對象?

[英]MongoDB aggregate objects with an array of objects?

這是我在json收藏的一部分:

[{"company":"Lenovo", "models": 
    [{"model":"ThinkPad T400", "gens": 
        [{"gen":"3", "start":2012},
        {"gen":"2", "start":2008},
        {"gen":"1", "start":2004}]
    }...]
}...]

我正在嘗試提出一個聚合命令,該命令將返回以下內容:

[{ "_id":"Lenovo", 
  "models":[{ "model": "ThinkPad T400", 
              "gens":["1","2","3"]
            }...]
}...]

我嘗試了以下聚合命令,但沒有用:

db.makes.aggregate([{
    $group:{
        _id: '$company',
        models: { $push:  { 
            model: "$models.model", 
            gen: "$models.gens.gen"
        }} 
    } 
}])

我得到這個結果:

[{ "_id":"Lenovo", 
  "models":[{ "model": ["ThinkPad T400"], 
              "gens":[ ["1","2","3"] ]
            }...]
}...]

這可能是因為我的每個對象都有一個對象數組(模型),並且該對象也有一個對象數組(Gens)。

什么是對 MongoDB 的正確請求,它會返回我的預期結果?

試試這個查詢:

db.makes.aggregate([
{$unwind : '$models'},
{
    $group:{
        _id: '$company',
        models: { $push:  { 
            model: "$models.model", 
            gen: "$models.gens.gen"
        }} 
    }
}])

輸出將是

{
    "_id" : "Lenovo",
    "models" : [ 
        {
            "model" : "ThinkPad T400",
            "gen" : [ 
                "3", 
                "2", 
                "1"
            ]
        }
    ]
}

我可能在這里遺漏了一些東西,但在我看來,您的原始數據與您想要獲得的數據非常相似。 company設置給Lenovo文件是否不止一份?

如果沒有,您可以使用更簡單的命令獲得幾乎您正在尋找的內容:

db.makes.find({}, {_id: 0, company: 1, "models.model": 1, "models.gens.gen": 1 });

這不會是您正在尋找的結果:

{
  "company": "Lenovo",
  "models": [
    {
      "model": "ThinkPad T400",
      "gens": [
        {
          "gen": 3
        },
        {
          "gen": 2
        },
        {
          "gen": 1
        }
      ]
    }
  ]
}

並且它僅在company字段已經是唯一的情況下才有效,但是 MongoDB 提供它會更容易,因為您不必使用聚合框架,也不需要展開任何潛在的長數組。

使用$unwind操作符彈出並訪問對象

我的數據是

在此處輸入圖片說明

我的查詢是什么時候進行聚合

[{$unwind : '$geolocation'},
     {
       $group:
         {
           _id: {city:"$geolocation.city",year: { $year: "$geolocation.date" }},
           count: { $sum: 1 }
         }
     }
   ]

結果:

{
    "_id" : {
        "city" : "Bengaluru",
        "year" : 2020
    },
    "count" : 3.0
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM