【问题标题】:MongoDb mongoose aggregatePagination returns multiple same documents over different pagesMongoDb mongoose aggregatePagination 在不同页面上返回多个相同的文档
【发布时间】:2018-05-23 00:59:02
【问题描述】:

我遇到了 mongodb 和 mongoose 的分页问题。 我正在尝试查询一组导师,并在分页和排序(按更新日期)结果中获取与查询匹配的导师。 但事实是我在不同的页面上获得了多个相同的文档...... 我希望它返回一组独特的文档。 这是我的功能的一部分(其余的只是从请求正文构建查询):

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 让它发生的。如果我删除它,一切正常。不过我需要它...

【问题讨论】:

  • Tutor.populate,不应该查询填充集合的ref 列吗?为什么不直接尝试返回 result 而不返回 populate 并查看响应是否符合预期。
  • 填充“填充”结果。所以结果已经有了。我不认为这是问题
  • 分页所需的跳过和限制似乎不符合聚合排序,这可能是您遇到问题的原因。试试var options = { page: page, limit: perPage, sortBy: { 'updatedDate':-1 } } 看看有没有什么变化。
  • 不幸的是,它并没有解决问题:(但显然是排序导致它发生

标签: javascript node.js mongodb reactjs mongoose


【解决方案1】:

经过大量研究。我找到了这个解决方案。希望它能解决您的问题。

Jobs.aggregatePaginate(aggregateQuery, { page: 1, limit: 10, sort: { 'createdAt': 'desc' } }, function (){});

【讨论】:

    猜你喜欢
    • 2019-05-04
    • 2019-10-04
    • 2021-12-26
    • 2021-08-13
    • 2015-08-23
    • 1970-01-01
    • 2021-10-21
    • 2014-02-21
    • 1970-01-01
    相关资源
    最近更新 更多