猫鼬model.find()。collat​​ion()问题

时间:2020-10-22 07:41:57

标签: node.js mongoose collation

我有一个MEAN应用。这是关于使用mongoose model.find()方法中的collat​​ion()选项以正确的顺序显示客户端列表。前端使用Angular Material Table进行服务器端过滤,分页和排序。

以下是节点clientController中用于获取所有客户端的代码。 当客户端列表页面首次加载时,或当我重新加载页面时,此方法工作正常。 当我在页面上使用“筛选器”选项或“删除客户端”选项时,会出现问题。 在这两种情况下,修订后的客户列表都将显示而没有排序规则效果。即ABC Ltd和abc ltd客户不在一起。

实际上,filter事件触发了控制器中相同的getClients方法。并且deleteClient方法在model.deleteOne()的.then()块中具有相同的代码。

exports.getClients =  (req, res, next) => {
  filter = req.query.filter;
  sortKey = req.query.sortKey;
  sortOrder = req.query.sortOrder;
  pageSize = +req.query.pageSize;
  pageIndex = +req.query.pageIndex;

  let fetchedDocs;
  let docQuery;

  if(filter) {
    docQuery = Client.find({
      $or: [
        { compName: { $regex:  filter, $options: 'i' } },
        { city: { $regex:  filter, $options: 'i' } },
      ]
      }).collation({ locale: 'en'});                          //<<<<<<<<<
  } else {
    docQuery = Client.find().collation({ locale: 'en'});      // <<<<<<<<<
  }
  if(pageSize && pageIndex >= 0) {
    if(!sortKey) {
      docQuery.skip(pageSize * pageIndex).limit(pageSize);
    }else{
      if(sortOrder === 'desc') {
        sortOption = '-' + sortKey
      }else {
        sortOption = sortKey
      }
      docQuery.sort(sortOption).skip(pageSize * pageIndex).limit(pageSize);
    }
  }
  docQuery
    // .map(documents => basicDetails(documents))
    .then(documents => {
      fetchedDocs = documents;
      return Client.countDocuments();
    })
    .then(count => {
      // status 200: Request Successful
      res.status(200).json({
        clients: fetchedDocs,
        totalCount: count
      });
    })
    .catch(err => {
      res.status(500).json({
        message: "Server Error in fetching Clients data!"
      });
    });
};

0 个答案:

没有答案