我面临着mongodb和mongoose的问题。 我试图查询一组导师,并在分页和排序(通过updatedDate)结果中获取匹配查询的那些。 但事实是我在不同的页面上获得了多个相同的文档...... 我希望它能返回一组独特的文档。 这是我的函数的一部分(其余的只是从请求体构建查询):
exports.search = (req, res) => {
var options = { page: page, limit: perPage, sortBy: { updatedDate: -1 }}
const aggregate = Tutor.aggregate([
{
"$geoNear":
{
"near":
{
"type": "Point",
"coordinates": [lon1, lat1]
},
"distanceField": "distance",
"spherical": true,
"maxDistance": radius
}
},
{
$match: match
}
]);
Tutor
.aggregatePaginate(aggregate, options, function (err, result, pageCount, count) {
if (err) {
return res.status(400).send(err);
}
else {
var opts = [
{ path: 'levels', select: 'name' },
{ path: 'subjects', select: 'name' },
{ path: 'assos', select: 'name' }
];
Tutor
.populate(result, opts)
.then(result2 => {
return res.send({
page: page,
perPage: perPage,
pageCount: pageCount,
documentCount: count,
tutors: result2
});
})
.catch(err => {
return res.status(400).send(err);
});
}
})
};
现在,想象一下我查询第1页的每页限制为8.我已经正确地找回了我的8个文档,这些都是不同的。但是当我查询第2页时,每页有相同的限制,一半的文档已经在第1页中返回了! 你知道为什么会这样吗?谢谢!
修改
我认为是 sortBy 才能实现。如果我删除它,一切正常。我需要它......
答案 0 :(得分:0)
经过大量研究。我找到了解决方案。希望它能解决您的问题。
Jobs.aggregatePaginate(aggregateQuery, { page: 1, limit: 10, sort: { 'createdAt': 'desc' } }, function (){});