【问题标题】:range operator not returning expected results via mongodb database范围运算符未通过 mongodb 数据库返回预期结果
【发布时间】:2022-01-17 06:43:41
【问题描述】:

我现在已经通过 shell、Studio 3T IDE 和我的 API 本身对此进行了测试。

第一个查询如下所示:

Notification.find({
  userId: ObjectId("...")
}).limit(20).sort('-createdAt')

它返回按createdAt 时间戳排序的以下文档(也嵌入在_id 字段中):

然后我运行下一个查询,我希望返回从 _id: ObjectId("615869eac849ec00205aa112") 开始的结果:

Notification.find({
  userId: ObjectId("..."),
  _id: { $lt: ObjectId("615869eac849ec00205aa115"}
}).limit(20).sort('-createdAt')

我希望这个命令可以让我接下来的 20 个结果按照与上面原始查询相同的降序排序。但是,我得到以下信息:

其中有 3 个来自原始查询的结果。 _id 字段在我用作游标的_id 和错误返回的结果之间显然是唯一的,但经过检查,createdAt 时间戳与我使用的文档_idcreatedAt 时间戳完全相同范围查询。

【问题讨论】:

  • 也许这会有所帮助:sort({$natural:-1})

标签: mongodb mongoose pagination


【解决方案1】:

问题是您正在查询一个未排序的字段,期望该值识别结果集的特定点。

请注意,在第一个结果集中,条目 17 到 29 在 _id 值中都具有相同的纪元时间戳,并且这 13 个条目没有任何特定的顺序。

幸运的是,条目 20 具有该组中最大的 _id,因此所有其他 12 个都较小,即使是之前发生的那些。

要完成这项工作,还要按 _id 排序:

.sort({createdAt: -1, _id: -1})

【讨论】:

    猜你喜欢
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2020-05-04
    • 2021-01-22
    相关资源
    最近更新 更多