代码之家  ›  专栏  ›  技术社区  ›  gilesc

蒙古文复合排序?

  •  33
  • gilesc  · 技术社区  · 16 年前

    我知道如何按多个字段对MongoDB中的查询进行排序,例如, db.coll.find().sort({a:1,b:-1}) .

    我能用用户定义的函数进行排序吗?例如,假设a和b是整数,根据a和b之间的差异 (a-b) ?

    谢谢!

    3 回复  |  直到 10 年前
        1
  •  30
  •   mjs    10 年前

    更新: 这个答案似乎过时了;似乎可以通过使用 $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() )但是,这两种方法都不允许您提供自定义排序功能。

        2
  •  16
  •   Ari    11 年前

    遇到这个,我想到的是:

    db.collection.aggregate([
      { 
        $project: {
          difference: { $subtract: ["$a", "$b"] }
          // Add other keys in here as necessary
        }
      },  
      { 
        $sort: { difference: -1 } 
      }
    ])
    
        3
  •  11
  •   shingara    16 年前

    为什么不使用此操作创建字段并对其进行排序?