Mongo查询使用最大数量的不同属性或键对结果进行排序?

时间:2016-11-03 09:38:53

标签: mongodb mongodb-query

我需要编写一个MongoDB查找查询来从集合中获取结果,并根据每行的最大属性对它们进行排序。

例如: 现在的结果是这样的:

[{
    column1 : "abc",
    column2 : "def",
},
{
    column1 : "abc",
},
{
    column1 : "abc",
    column2 : "def",
    column3 : "ghi"
}]

应该返回什么查询(按列数的降序排列):

[{
    column1 : "abc",
    column2 : "def",
    column3 : "ghi"
},
{
    column1 : "abc",
    column2 : "def",
},
{
    column1 : "abc",
}]
  

查询是db..find({“column1”:“abc”});

是否可以通过查询数据库来实现?

1 个答案:

答案 0 :(得分:1)

不是最优的,但是您可以调用mapReduce来按字段数获取ID,然后按升序查询这些ID,这里是一些代码(未测试!

var map = function(doc) {
   emit(Object.keys(doc).length, doc._id);
}
var reduce = function(key, values) {
   return values;
}
coll.mapReduce(function() { map(this) }, reduce, function(err, results) {
   results.sort((a,b) => { return a._id > b._id });
   results.forEach(result => {
      console.log("now getting ids with " + result._id + " fields");
      var cursor = coll.find({ _id : { $in : result.value}});
      // do something with cursor.
   });
);

另一种选择是在每个文档“fields_count”中添加一个字段,该字段将包含该文档的字段数,您可以使用该字段进行查询。