我在MongoDB中有一个集合,其中包含如下所示的文档:

{
  "_id": "63269e0f85bfd011e989d0f7",
  "name": "Aravind Krishna",
  "mobile": 7309454620,
  "email": "akaravindk59@gmail.com",
  "password": "$2b$12$0dOE/0wj6uX604h3DZpGxuO/L.fZg7KCm7mOGsNMkarSaeG2C/Wvq",
  "orders": [
    {
      "paymentIntentId": "pi_3LjFDtSHVloG65Ul0exLkzsO",
      "cart": [array],
      "amount": 3007,
      "created": 1663475717,
      "_id": "6326a01344f26617fc1a65d6"
    },
    {
      "paymentIntentId": "pi_3LjFFUSHVloG65Ul1FQHlZ9H",
      "cart": [array],
      "amount": 389,
      "created": 1663475816,
      "_id": "6326a07744f26617fc1a65d8"
    }
  ],
  "__v": 0
}

我只想获得按created属性以升序和降序方式排序的Ordersarray.正如我们在这里看到的,该文档中的Orders字段是一个对象array.如果您有解决方案,请给出一个解决方案.我try 了sortArray方法,但它给出了一个错误.请帮帮忙.

对于某些帮助,输出应如下所示:

    {
  "_id": "63269e0f85bfd011e989d0f7",
  "orders": [
    {
      "paymentIntentId": "pi_3LjFDtSHVloG65Ul0exLkzsO",
      "cart": [array],
      "amount": 3007,
      "created": 1663475717,
      "_id": "6326a01344f26617fc1a65d6"
    },
    {
      "paymentIntentId": "pi_3LjFFUSHVloG65Ul1FQHlZ9H",
      "cart": [array],
      "amount": 389,
      "created": 1663475816,
      "_id": "6326a07744f26617fc1a65d8"
    }
  ]
}

看,我只得到了Orders字段,但我希望它按创建的属性值升序和降序排序.

推荐答案

正如您提到的,实现这一点的最佳方法是使用$sortArray,我假设您收到的错误是版本不匹配,因为这个运算符是最近才在5.2版中添加的.

另一种实现与不那么令人愉快的结果相同的方法是,您需要对数组进行$unwind次运算,对结果进行$sort次运算,然后再对 struct 进行$group次运算,然后使用$reverseArray来添加"其他"顺序很容易.尽管我建议您只需在代码中处理"反向"要求,但总的来说,管道将如下所示:

db.collection.aggregate([
  {
    $unwind: "$orders"
  },
  {
    $sort: {
      "orders.created": 1
    }
  },
  {
    $group: {
      _id: "$_id",
      asc_orders: {
        $push: "$orders"
      }
    }
  },
  {
    $addFields: {
      desc_orders: {
        "$reverseArray": "$asc_orders"
      }
    }
  }
])

Mongo Playground

Mongodb相关问答推荐

在MongoDB中使用explain()和查询时缺少winningPlan''''

我可以在BSON中使用代理字段吗?

在服务器上部署后端时判断??=默认判断

mongodb.将文档分组在数组中,对它们进行评分计数和求和并添加新字段

以聚合顺序使用 $$ROOT

增加嵌套对象中的值?

Meteor mongo 驱动程序可以处理 $each 和 $position 运算符吗?

在mongo聚合中将ObjectID转换为字符串

什么是 Mongoose (Nodejs) 复数规则?

MongoDB插入引发重复键错误

如何更新 mongodb 文档以向数组添加新元素?

将数据插入 MongoDB - 没有错误,没有插入

如何使用 Node.js 和 mongoose 解决command find requires authentication?

带有排序功能的mongoose findOne

MEAN 堆栈文件上传

使用 mongoengine 将多文档插入到 mongodb

mongodb安装失败运行mongod

Mongodb同时在多个字段上聚合(计数)

如何使用户的邮箱在 mongoDB 中唯一?

Mongodb Compass 无法在 Ubuntu 18.10 中打开