首页 > 解决方案 > 当文档仅保存非空列时面临排序问题

问题描述

当文档仅将非空列保存到文档中时面临排序问题:我的 mongodb 文档如下所示:

 # documents-1 :
            "taskId": "2",
            "taskType": "RFOUTAUD",
            "id": "5d25bdda2f7ef0000654f281",             
            "releaseDatetime": "2019-05-28T09:00:39",
            "startDateTime": "2019-05-28T09:44:11",
            "endDateTime": "2019-05-28T09:50:25",
            "resourceId": "SUPER",
            "deviceCode": "QATERM1",
            "effectivePriority": 40,
            "sourceLocation": "1SS100",
            "sourceLocationTravelSequence": "020055000",
            "sourceWorkZone": "1RCVSHP035",
            "sourceWorkZoneTravelSequence": "15035",

文件-2:

        "taskId": "70",
        "taskType": "RFOUTAUD",
        "id": "5d25bdda2f7ef0000654f281",           
        "releaseDatetime": "2019-05-28T09:00:39",
        "startDateTime": "2019-05-28T09:44:11",
        "endDateTime": "2019-05-28T09:50:25",
        "resourceId": "SUPER",
        "deviceCode": "QATERM1",
        "effectivePriority": 40,
        "sourceLocation": "1SS100",
        "sourceLocationTravelSequence": "020055000",
        "sourceWorkZone": "1RCVSHP035",
        "goalTime": 20

#documents-1: 有 n 条记录,#documents-2 的记录很少 - 有附加列“goalTime”

现在,当我在“goalTime”列上使用 Pageable 进行排序时,结果我只得到具有“goalTime”的文档,并且不包括缺少列的文档,查询看起来像这样

db.getCollection('29ec09db-20b9-4c52-a5af-53519f75a5b4_task').find({}).limit(10).sort({goalTime:1})

在完成 org.springframework.data.domain.Sort 实现之后,我找到了包含那些列本身缺失的文档的方法。现在的问题是包含“goalTime”列的文档,其值为最后一条记录,如果我将限制设为 10,它将不会成为该结果的一部分。

这是 mongo 查询:

`db.getCollection('29ec09db-20b9-4c52-a5af-53519f75a5b4_task').find({}).limit(2).sort({goalTime:1,NULLS_LAST:1})`

我正在寻找结果,它首先显示已对列进行排序的文档,然后是列本身缺失的文档

标签: mongodbsortingnosql

解决方案


我找到了我正在寻找的解决方案。即使文档中不存在排序列,以下查询也包括记录db.getCollection('29ec09db-20b9-4c52-a5af-53519f75a5b4_task').find({}).limit(20).sort({goaltime: -1, NULL_LAST : 1})


推荐阅读