有没有办法可靠地获得最小/最大游标之间的结果计数?
我正在使用cursor.min()
,cursor.max()
和cursor.hint()
在mongo中建立一些基于光标的分页。我的所有工作都很好,但是我希望能够对这些游标之间的所有条目进行计数。不幸的是,我还没有找到一种方法来使其工作。 count
方法似乎忽略了min/max
设置。
例如我有以下索引:
{ group_id: 1, updated_at: 1, _id: 1 }
以下查询:
db.getCollection("my_collection")
.find({
group_id: 'gr_cjr7ucmwi00030xqip5ez34ym',
})
.hint('sort_updated_at')
.min({
group_id: 'gr_cjr7ucmwi00030xqip5ez34ym',
updated_at: ISODate('2019-03-15T17:04:08.094+0000'),
_id: ObjectId('5cc74f0ff0086e91e6bfb01e'),
})
.max({
group_id: 'gr_cjr7ucmwi00030xqip5ez34ym',
updated_at: ISODate('2019-03-15T17:04:11.735+0000'),
_id: ObjectId('5cc2076914213d5528e82053'),
});
返回10
个文档。
但是,如果我向该查询附加.count()
,则会得到17
,这是包含group_id: 'gr_cjr7ucmwi00030xqip5ez34ym'
的文档总数,包括超出光标最小/最大边界的文档的数量。
如果我使用较新的.countDocuments()
,它会明确指出.min() is not a function
,因此显然不起作用。
count
查询约束中
db.getCollection("my_collection")
.count({
group_id: 'gr_cjr7ucmwi00030xqip5ez34ym',
updated_at: {
$gte: ISODate('2019-03-15T17:04:08.094+0000'),
$lte: ISODate('2019-03-15T17:04:11.735+0000'),
}
});
但是,当文档恰好位于最小/最大光标位置之外时,它们具有相同的updated_at
值。即即使该条目位于最小光标之前(其_id
小于光标中的_id
),使用该条目上方的光标也将包括在计数中:
{
group_id: 'gr_cjr7ucmwi00030xqip5ez34ym',
updated_at: ISODate('2019-03-15T17:04:08.094+0000'),
_id: ObjectId('5cc74f0ff0086e91e6bfb01d'),
}