1

我一直在尝试寻找在 mongodb 中对文档进行排序的方法,以便空值对于我正在使用的智能分页始终是最后一个

任何人都可以用猫鼬来完成吗?

var query = Product.find({}).sort({
    price: sortOrder,
  });
4

1 回答 1

0

您可以使用聚合,并创建一个临时字段(isNull)来检查是否sortOrder为空。然后你只需要排序{ $sort: { isNull: -1, sortOrder: 1 }}

var query = Product.aggregate([
    {
        $project: {
            ...
            sortOrder: '$sortOrder',
            isNull: { $toBool: { $ifNull: [ '$posts.pageOrder', 0 ] } },
        }
    },
    { $sort: { isNull: -1, pageOrder: 1 } }
])

在不同的情况下,当您想通过 update_at(新 -> 旧)在末尾对 null 进行排序时,您可以像这样使用它:

var query = Product.aggregate([
    {
        $project: {
            ...
            sortOrder: '$sortOrder',
            isNull: { $toBool: { $ifNull: [ '$posts.pageOrder', 0 ] } },
            updated_at: '$updated_at'
        }
    },
    { $sort: { isNull: -1, pageOrder: 1, updated_at: -1 } }
])
于 2020-08-12T08:38:42.437 回答