繁体   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