在 MongoDB 中最后对空值进行排序

Ben*_*dow 7 javascript mongodb

我正在使用以下查询根据名为 sortIndex 的字段按升序填充 MongoDB 中的项目。

有时虽然数据库中的项目没有 sortIndex 字段。通过以下查询,带有空 sortIndex 的项目显示在顶部,我想知道如何让它们显示在底部。为此我需要两个查询还是有办法使用一个查询?

.populate({path: 'slides', options: { sort: { 'sortIndex': 'ascending' } } })
Run Code Online (Sandbox Code Playgroud)

小智 9

你可以这样做:

db.collection.aggregate([
    { $addFields: 
        { 
            hasValue : { $cond: [ { $eq: [ "$value", null ] }, 2, 1 ] },
        }
    },
])
.sort({hasValue : 1, value : 1});
Run Code Online (Sandbox Code Playgroud)

  • 点评来源: 你好,请不要只用源代码来回答。尝试提供有关您的解决方案如何工作的精彩描述。请参阅:[如何写出一个好的答案?](https://stackoverflow.com/help/how-to-answer)。谢谢 (3认同)

viz*_*tiz 3

重复:如何在 Mongoose 排序结束时保留空值?

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

我不确定我要说的解决方案。我无法对此进行测试,因为我现在没有 mongo 数据库集,但我认为您可以使用<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)
         }
      }
   ]
)
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助 !!