在MongoDB中将空值排序放在最后

7
我正在使用以下查询从MongoDB中按sortIndex字段升序填充项目。
但是,有时数据库中的项目没有sortIndex字段。使用以下查询,具有null sortIndex的项目将显示在顶部,我想知道如何使它们显示在底部。我需要两个查询吗?还是有一种方法可以使用一个查询?
.populate({path: 'slides', options: { sort: { 'sortIndex': 'ascending' } } })

排除那些空的sortIndexes是否是可行的选择,还是它们对结果是必需的? - Sterling Archer
看起来你需要执行两个查询,才能对 MongoDB 索引中的空值进行排序。 - Sterling Archer
这个回答解决了你的问题吗?如何在mongodb中排序,使得null值排在最后? - Mendy
2个回答

8
你可以像这样做:
db.collection.aggregate([
    { $addFields: 
        { 
            hasValue : { $cond: [ { $eq: [ "$value", null ] }, 2, 1 ] },
        }
    },
])
.sort({hasValue : 1, value : 1});

2
来自评论区:嗨,请不要只回答源代码。尝试提供一个关于你的解决方案如何工作的好描述。请参阅:如何撰写一个好的答案?。谢谢。 - sɐunıɔןɐqɐp

2

重复的问题:如何在Mongoose中将null值保留在排序末尾?

无论如何,发布相同的解决方案...

我不确定我即将提出的解决方案。 我现在无法测试它,因为我没有设置mongo db,但我认为您可以使用<collection>.aggregate$project$sort来实现此目的。

示例代码:

db.inventory.aggregate(
   [
      {
         $project: {
            item: 1,
            description: { $ifNull: [ "$amount", -1*(<mimimum value>)* ] }
         }
      },
      { 
         $sort : { 
           amount : (-1 or 1 depending on the order you want)
         }
      }
   ]
)

希望这有所帮助!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接