如何根据数组成员对集合进行排序
How to sort a collection based on a member of array
我需要根据价格对文档进行排序,而价格是一个数组,而我们根据键 PRICE_A、PRICE_B 或 PRICE_C 对价格进行排序。
示例数据:
[
{
"_id": 1,
"price": [
{
"PRICE_A": 3098.67
},
{
"PRICE_B": 3166.67
},
{
"PRICE_C": 3800
}
]
},
{
"_id": 2,
"price": [
{
"PRICE_A": 679.6
},
{
"PRICE_B": 781.6
},
{
"PRICE_C": 938
}
]
}
]
预期输出:按升序排列PRICE_A
[
{
"_id":2,
"price":[
{
"PRICE_A":679.6
},
{
"PRICE_B":781.6
},
{
"PRICE_C":938
}
]
},
{
"_id":1,
"price":[
{
"PRICE_A":3098.67
},
{
"PRICE_B":3166.67
},
{
"PRICE_C":3800
}
]
}
]
我正在使用这个查询-
https://mongoplayground.net/p/Ajaw4SFVpzg
没有直接的方法可以做到这一点,您需要改进架构设计,否则此查询会影响性能,
$addFields
创建新的自定义字段 p
$arrayElemAt
通过传递其键名来获取第一个价格值,这里你必须传递你的动态价格键名
$sort
按 p
升序排列
$unset
删除 p
密钥,因为现在不需要它
{
"$addFields": {
"p": { "$arrayElemAt": ["$price.PRICE_A", 0] }
}
},
{ "$sort": { "p": 1 } },
{ "$unset": "p" }
我需要根据价格对文档进行排序,而价格是一个数组,而我们根据键 PRICE_A、PRICE_B 或 PRICE_C 对价格进行排序。 示例数据:
[
{
"_id": 1,
"price": [
{
"PRICE_A": 3098.67
},
{
"PRICE_B": 3166.67
},
{
"PRICE_C": 3800
}
]
},
{
"_id": 2,
"price": [
{
"PRICE_A": 679.6
},
{
"PRICE_B": 781.6
},
{
"PRICE_C": 938
}
]
}
]
预期输出:按升序排列PRICE_A
[
{
"_id":2,
"price":[
{
"PRICE_A":679.6
},
{
"PRICE_B":781.6
},
{
"PRICE_C":938
}
]
},
{
"_id":1,
"price":[
{
"PRICE_A":3098.67
},
{
"PRICE_B":3166.67
},
{
"PRICE_C":3800
}
]
}
]
我正在使用这个查询- https://mongoplayground.net/p/Ajaw4SFVpzg
没有直接的方法可以做到这一点,您需要改进架构设计,否则此查询会影响性能,
$addFields
创建新的自定义字段p
$arrayElemAt
通过传递其键名来获取第一个价格值,这里你必须传递你的动态价格键名$sort
按p
升序排列$unset
删除p
密钥,因为现在不需要它
{
"$addFields": {
"p": { "$arrayElemAt": ["$price.PRICE_A", 0] }
}
},
{ "$sort": { "p": 1 } },
{ "$unset": "p" }