簡體   English   中英

MongoDB 嵌套數組聚合正確

[英]MongoDB nested array aggregation correctly

好的,所以我已經厭倦了很多事情來解決這個問題,我面臨的是,我有這個文件

{
    "_id": "5ef9c6a9691c33e13c455413",
    "tags": [
      "chicken wings",
      "pizza",
      "burgers"
    ],
    "shopName": "Emily",
    "isOpen": true,
    "address": "919 Fulton St, Brooklyn, NY 11238",
    "image": "random-2.jpg",
    "category": "Asian",
    "stars": [
      12,
      22,
      32,
      0,
      0
    ],
    "logo": "logo.png",
    "phone": "+96501234567",
    "totalCompletedOrders": 22,
    "eta": "60",
    "products": [
      {
       ...
        "category": "Appeteasers"
      },
      {
       ...
        "category": "Appeteasers"
      },
      {
        ...
        "category": "Appeteasers"
      },
      {
        ...
        "category": "Appeteasers"
      },
      {
       ...
        "category": "Appeteasers"
      },
      {
       ...
        "category": "Appeteasers"
      },
      {
        ...
        "category": "Appeteasers"
      },
      {
        ...
        "category": "Fino sides"
      },
      {
        ...
        "category": "Fino sides"
      },
      {
        ...
        "category": "Fino sides"
      },
      {
        ...
        "category": "Fino sides"
      },
      {
       ...
        "category": "Peri-peri chicken"
      },
      {
        ...
        "category": "Peri-peri chicken"
      },
      {
        ...
        "category": "Peri-peri chicken"
      },
      {
        ...
        "category": "Peri-peri chicken"
      },
      {
        ...
        "category": "Peri-peri chicken"
      },
      {
        ...
        "category": "Peri-peri chicken"
      },
      {
        ...
        "category": "Peri-peri chicken"
      },
      {
        ...
        "category": "Peri-peri chicken"
      },
      {
        ...
        "category": "Peri-peri chicken"
      },
      {
        ...
        "category": "Peri-peri chicken"
      },
      {
        ...
        "category": "Peri-peri chicken"
      },
      {
        ...
        "category": "Peri-peri chicken"
      },
      {
        ...
        "category": "Peri-peri chicken"
      },
      {
        ...
        "category": "Peri-peri chicken"
      },
      {
        ...
        "category": "Peri-peri chicken"
      },
      {
       ...
        "category": "Peri-peri chicken"
      },
      {
        ...
        "category": "Peri-peri chicken"
      }
    ]
  }

所以我的問題是我需要對產品數組進行分組並使其看起來像這樣或接近它

{
    "_id": "5ef9c6a9691c33e13c455413",
    "tags": [
      "chicken wings",
      "pizza",
      "burgers"
    ],
    "shopName": "Emily",
    "isOpen": true,
    "address": "919 Fulton St, Brooklyn, NY 11238",
    "image": "random-2.jpg",
    "category": "Asian",
    "stars": [
      12,
      22,
      32,
      0,
      0
    ],
    "logo": "logo.png",
    "phone": "+96501234567",
    "totalCompletedOrders": 22,
    "eta": "60",
    "products": [{
        category: "Appeteasers",
        products:[...all Appeteasers chicken here]
      },{
        category: "Fino sides chicken",
        products:[...all Fino sides chicken here]
      },{
        category: "Peri-peri chicken",
        products:[...all Peri-peri chicken here]
     }]
  }

我累的是


Store.aggregate([
    {$match:{ _id: id}, },
    { $unwind: "$products" },
    {
      $group : {
        _id: "$products.category",
        "products" : {"$addToSet": "$products"},
        
      }
    },
  ]);

我非常接近結果,但我的根字段不包括在內

[
  {
    "_id": "Peri-peri chicken",
    "products": [...]
  },
  {
    "_id": "Appeteasers",
    "products": [...]
  },
  {
    "_id": "Fino sides",
    "products": [...]
  }
]


希望得到一些幫助,謝謝

要獲取文檔中的所有其他鍵,您在$project中提到了鍵,那么只有它們可以訪問。 在下面的代碼中,我剛剛添加了其中的三個來展示它是如何完成的。 您可以添加其中的 rest。

Store.aggregate([
{
    $match:{ _id: id}
},
{
    $project: { products: "$products", shopName: "$shopName", stars: "$stars", tags: "$tags", }
},
{
    $unwind: "$products" 
},
{
    $group : {
        _id: "$products.category",
        "products" : {"$addToSet": "$products"},
        "tags": {"$addToSet": "$tags"},
        "stars": {"$addToSet": "$stars"},
        "shopName": {"$first": "$shopName"}
    }
},
{
    $project: {products: "$products", tags: "$tags", shopName: "$shopName", stars: "$stars" }
},
]);

暫無
暫無

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

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