如何使用MongoDB的sortArray按自定义布尔条件排序variants数组?
解决MongoDB数组按自定义条件排序的问题
针对你需要将variants数组中props非空的元素排在前面的需求,可以用MongoDB的$sortArray结合条件表达式实现,具体聚合管道如下:
db.collection.aggregate([ { $addFields: { variants: { $sortArray: { input: "$variants", sortBy: { $cond: { if: { $gt: [{ $size: "$props" }, 0] }, then: 0, else: 1 } } } } } } ])
代码说明:
$addFields:保留原文档所有字段的同时,更新variants字段的值$sortArray:对指定数组进行排序,其中:input:指定要排序的原数组"$variants"sortBy:自定义排序规则,用$cond判断每个variant的props数组长度:- 如果
props长度大于0(非空),返回0 - 如果
props为空数组,返回1
升序排序时,0会排在1前面,正好满足你要的非空props元素优先的需求
- 如果
执行上述聚合后,就能得到你预期的结果。
内容的提问来源于stack exchange,提问作者Lucien Chardon
相关产品推荐
相关产品推荐

