【问题标题】:How to return all fields without specify after $group stage如何在 $group 阶段之后返回所有字段而不指定
【发布时间】:2019-07-06 16:26:24
【问题描述】:

如何对文档中的子数组进行排序并保留父字段? 我有一个这样的集合:

{ 
    "_id" : ObjectId("5d1757929831633ff8abb638"), 
    "name" : "Carraro Exlusive", 
    "description" : "Carraro Exlusive description", 
    "image" : "image-15", 
    "__v" : 0, 
    "sellers" : [
        {
            "_id" : ObjectId("5d1757929831633ff8abb639"), 
            "product" : ObjectId("5d1757929831633ff8abb638"), 
            "seller" : ObjectId("5d1518582f9254189ca92e59"), 
            "price" : 13, 
            "stock" : 5, 
            "__v" : 0
        }, 
        {
            "_id" : ObjectId("5d175b60cf85a22f745235ee"), 
            "product" : ObjectId("5d1757929831633ff8abb638"), 
            "seller" : ObjectId("5d164802c4dc7811b0f34b86"), 
            "price" : 10, 
            "stock" : 222, 
            "__v" : 0
        }
    ]
}

我想按价格从小到大对内部卖家数组进行排序。

我想要的结果是:

{ 
    "_id" : ObjectId("5d1757929831633ff8abb638"), 
    "name" : "Carraro Exlusive", 
    "description" : "Carraro Exlusive", 
    "category" : ObjectId("5d151ad1b72c830f14374bb4"), 
    "brand" : ObjectId("5d151981b72c830f14374bb2"), 
    "image" : "image-15", 
    "__v" : 0, 
    "sellers" : [
     {
            "_id" : ObjectId("5d175b60cf85a22f745235ee"), 
            "product" : ObjectId("5d1757929831633ff8abb638"), 
            "seller" : ObjectId("5d164802c4dc7811b0f34b86"), 
            "price" : 10, 
            "stock" : 222, 
            "__v" : 0
        },
        {
            "_id" : ObjectId("5d1757929831633ff8abb639"), 
            "product" : ObjectId("5d1757929831633ff8abb638"), 
            "seller" : ObjectId("5d1518582f9254189ca92e59"), 
            "price" : 13, 
            "stock" : 5, 
            "__v" : 0
        }
    ]
}

我看到了以下帖子,但我想保留父字段: Mongodb sort inner array

【问题讨论】:

  • @Ashh 正如我在帖子中指出的那样,我已经看到了问题stackoverflow.com/questions/15388127/mongodb-sort-inner-array 我想要的是保留父字段。
  • @Ashh 太棒了:) 非常感谢,有没有办法接受这个作为答案?
  • @Ashh 您应该将该查询放在答案中。该解决方案将出现在谷歌搜索类似问题中。如果您没有机会这样做,我可以很快将您的查询复制粘贴到答案中。非常酷+1
  • @JBone 是啊!!!完成

标签: mongodb mongodb-query aggregation-framework


【解决方案1】:

你可以使用下面的聚合

db.collection.aggregate([
  { "$unwind": "$sellers" },
  { "$sort": { "sellers.price": 1 }},
  { "$group": {
    "_id": "$_id",
    "sellers": { "$push": "$sellers" },
    "allFields": { "$first": "$$ROOT" }
  }},
  { "$replaceRoot": {
    "newRoot": {
      "$mergeObjects": [
        "$allFields",
        { "sellers": "$sellers" }
      ]
    }
  }}
])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多