簡體   English   中英

mongodb-聚合-嵌套對象

[英]mongodb - aggregation - nested object

我運行聚合函數以返回最喜歡的項目,如下所示:

db.users.aggregate(
    [
      { $unwind : "$favoriteItems" },
      { $group : { _id : "$favoriteItems" , number : { $sum : 1 } } },
      { $sort : { number : -1 } }
    ]
)

這是我的用戶收藏中的原型文件

{
  "_id": "5a68a9308117670afc3522cd",
  "username": "user1",
  "favoriteItems": {
    "5a0c6711fb3aac66aafe26c6": {
      "_id": "5a0c6711fb3aac66aafe26c6",
      "name": "item1",
    },
    "5a0c6b83fd3eb67969316dd7": {
      "_id": "5a0c6b83fd3eb67969316dd7",
      "name": "item2",
    },
    "5a0c6b83fd3eb67969316de4": {
      "_id": "5a0c6b83fd3eb67969316de4",
      "name": "item3"
    }
  }
}

但是,聚合函數將favouriteItems計為一個項目,並返回與favouriteItems中的元素相對的每個favouriteItems計數。 我在聚合函數中缺少什么?

您可以嘗試下面3.4中的匯總。 因此, $unwind在數組上而不在文檔上起作用。

因此,使用$objectToArray將對象轉換為鍵值對數組。

db.users.aggregate([
  {"$addFields":{"favoriteItems":{"$objectToArray":"$favoriteItems"}}},
  {"$unwind":"$favoriteItems"},
  {"$group":{"_id":"$favoriteItems.k","number":{"$sum":1}}},
  {"$sort":{"number":-1}}
])

暫無
暫無

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

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