范围运算符未通过 mongodb 数据库返回预期结果
range operator not returning expected results via mongodb database
我现在已经通过 shell、Studio 3T IDE 和我的 API 本身测试了它。
第一个查询看起来像这样:
Notification.find({
userId: ObjectId("...")
}).limit(20).sort('-createdAt')
其中 return 以下文档按其 createdAt
时间戳排序(也嵌入在 _id
字段中):
然后我 运行 下一个查询,我希望 return 结果从 _id: ObjectId("615869eac849ec00205aa112")
:
开始
Notification.find({
userId: ObjectId("..."),
_id: { $lt: ObjectId("615869eac849ec00205aa115"}
}).limit(20).sort('-createdAt')
我希望此命令能够让我按照与上面的原始查询相同的降序排序接下来的 20 个结果。但是,我得到以下信息:
原始查询有 3 个结果。 _id
字段在我用作游标的 _id
和错误的 returned 结果之间显然是唯一的,但在检查后 createdAt
时间戳与 createdAt
文档的时间戳 _id
我用于范围查询。
问题是您正在查询一个未排序的字段,期望该值标识结果集中的特定点。
请注意,在第一个结果集中,条目 17 到 29 在 _id 值中都具有相同的纪元时间戳,并且这 13 个条目没有任何特定顺序。
幸运的是,条目 20 具有该组中最大的 _id,因此所有其他 12 个都较小,即使是碰巧出现在前面的那些。
要完成这项工作,还要对 _id 进行排序,例如:
.sort({createdAt: -1, _id: -1})
我现在已经通过 shell、Studio 3T IDE 和我的 API 本身测试了它。
第一个查询看起来像这样:
Notification.find({
userId: ObjectId("...")
}).limit(20).sort('-createdAt')
其中 return 以下文档按其 createdAt
时间戳排序(也嵌入在 _id
字段中):
然后我 运行 下一个查询,我希望 return 结果从 _id: ObjectId("615869eac849ec00205aa112")
:
Notification.find({
userId: ObjectId("..."),
_id: { $lt: ObjectId("615869eac849ec00205aa115"}
}).limit(20).sort('-createdAt')
我希望此命令能够让我按照与上面的原始查询相同的降序排序接下来的 20 个结果。但是,我得到以下信息:
原始查询有 3 个结果。 _id
字段在我用作游标的 _id
和错误的 returned 结果之间显然是唯一的,但在检查后 createdAt
时间戳与 createdAt
文档的时间戳 _id
我用于范围查询。
问题是您正在查询一个未排序的字段,期望该值标识结果集中的特定点。
请注意,在第一个结果集中,条目 17 到 29 在 _id 值中都具有相同的纪元时间戳,并且这 13 个条目没有任何特定顺序。
幸运的是,条目 20 具有该组中最大的 _id,因此所有其他 12 个都较小,即使是碰巧出现在前面的那些。
要完成这项工作,还要对 _id 进行排序,例如:
.sort({createdAt: -1, _id: -1})