gpt4 book ai didi

arrays - 对 MongoDB 集合中的对象数组进行排序

转载 作者:行者123 更新时间:2023-12-05 05:33:49 24 4
gpt4 key购买 nike

我在 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 属性以升序和降序方式排序的订单数组。正如我们在这里看到的,该文档中的订单字段是一个对象数组。有解决办法的请给出。我尝试了 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"
}
]
}

看,我只有订单字段,但我希望它按创建的属性值升序和降序排序。

最佳答案

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

获得相同结果的另一种方法不太令人愉快,您需要$unwind 数组,$sort 结果,然后是$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

关于arrays - 对 MongoDB 集合中的对象数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73760865/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com