我需要编写一个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”});
是否可以通过查询数据库来实现?
答案 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
”中添加一个字段,该字段将包含该文档的字段数,您可以使用该字段进行查询。