如何根据数组的成员对集合进行排序
Posted
技术标签:
【中文标题】如何根据数组的成员对集合进行排序【英文标题】:How to sort a collection based on a member of array 【发布时间】:2021-12-10 08:21:23 【问题描述】:我需要根据价格对文档进行排序,价格是一个数组,而我们根据键 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
【问题讨论】:
【参考方案1】:没有直接的方法可以做到这一点,您需要改进架构设计,否则此查询会影响性能,
$addFields
创建一个新的自定义字段p
$arrayElemAt
通过传递它的键名来获取第一个价格值,这里你必须传递你的动态价格键名
$sort
p
按升序排列
$unset
删除 p
键,因为现在不需要它
"$addFields":
"p": "$arrayElemAt": ["$price.PRICE_A", 0]
,
"$sort": "p": 1 ,
"$unset": "p"
Playground
【讨论】:
以上是关于如何根据数组的成员对集合进行排序的主要内容,如果未能解决你的问题,请参考以下文章