mongodb - Mongo复杂排序?

我知道如何在 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 协同工作

mongodb - 获取文档的特定部分

python - 为什么 PyMongo 3 给出 ServerSelectionTimeoutEr

node.js - 使用 2 个字段的 Mongoose 自定义验证

node.js - 具有一对多关系的 Mongoose 文档引用

node.js - 未找到匹配项的 Mongoose 查询返回什么?

node.js - 为什么MongoDB Node Driver生成实例池被破坏错误?

python - 如何检查 MongoDB 实例的客户端是否有效?