我知道如何在 MongoDB 中按多个字段对查询进行排序,例如 db.coll.find().sort({a:1,b:-1})
。
我可以使用用户定义的函数进行排序吗?例如,假设 a 和 b 是整数,通过 a 和 b 之间的差异 (a-b)
?
谢谢!
最佳答案
更新:此答案似乎已过时;似乎可以通过使用 $project
function of the aggregation pipeline 或多或少地实现自定义排序。在排序之前转换输入文档。另请参阅@Ari 的回答。
我不认为这是直接可能的; sort documentation当然没有提到任何提供自定义比较功能的方法。
您可能最好在客户端进行排序,但如果您真的决定在服务器上进行排序,您也许可以使用 db.eval()
来安排在服务器上运行排序(如果您的客户端支持)。
服务器端排序:
db.eval(function() {
return db.scratch.find().toArray().sort(function(doc1, doc2) {
return doc1.a - doc2.a
})
});
相对于等效的客户端排序:
db.scratch.find().toArray().sort(function(doc1, doc2) {
return doc1.a - doc2.b
});
请注意,也可以通过 aggregation pipeline 进行排序。通过 $orderby
operator (即除了 .sort()
)但是这些方式都不允许您提供自定义排序功能。
https://stackoverflow.com/questions/3212919/
相关文章:
linux - Errr 'mongo.js:L112 Error: couldn' t 连接到服务
mongodb - 在 MongoDB 中存储 ObjectId 及其字符串形式之间的区别
python - 让 Spark、Python 和 MongoDB 协同工作
python - 为什么 PyMongo 3 给出 ServerSelectionTimeoutEr
node.js - 使用 2 个字段的 Mongoose 自定义验证
node.js - 具有一对多关系的 Mongoose 文档引用
node.js - 未找到匹配项的 Mongoose 查询返回什么?