我有一个MEAN应用。这是关于使用mongoose model.find()方法中的collation()选项以正确的顺序显示客户端列表。前端使用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!"
});
});
};