如何sorting导致nodejs – mongodbsearch,但通过调用dynamic方法

我在通过mongo本地连接器连接到mongodb的nodejs中开发一个web应用程序。

在我的一个js文件中,我有一个通用的方法来调用“find”或“findOne”操作来从mongodb集合中检索我需要的东西,如下所示:

这对我来说可以。

但现在,我需要对结果进行sorting,据我所知,Mongodb使用“sorting”方法来实现这一点。

collection.ensureIndex(indexedFields, function(error, indexName) { if (error) { callback(error); } else { var operation = (params.options.one) ? collection.findOne : collection.find; operation.call(collection, params.selector, params.fields, params.options, function(error, result){ if (error) { ... } else { ... } } ); } }); 

在一个简单的查询中,这应该是这样的:例如:

 collection.find().sort({field : 1}), 

我不知道如何调用“sorting”方法,这是我的通用方法。

有任何想法吗?

谢谢。

你有没有看过mongojs(https://github.com/gett/mongojs)? 我用这个为我的节点应用程序,它很好地工作(我也使用expressjs)。 你可以做一个简单的查找和按照下面的语法sorting:

 db.test.find().sort({name:1}, function(error, tuples) { console.log(tuples) }); 

你不能只是做你的电话输出相同的东西吗?

  operation.call(collection, params.selector, params.fields, params.options, function(error, result){ ... } ).sort({field: 1}); 

如果这种sorting只能应用于find的结果而不能find一个,那就更复杂了:

  var operation = (params.options.one) ? collection.findOne : function() { var findResults = collection.find.apply(this, [].slice.call(arguments)); return findResults.sort({field: 1}); }; 

(当然,最后完全没有经过testing,但看起来应该接近。)

使用游标是最好的解决scheme,因为分类是在mongodb引擎中处理的

 var grades = db.collection('data'); var cursor = grades.find(); // cursor.skip(1); // cursor.limit(4); // cursor.sort(['State', 1]); cursor.sort( [['Temperature', 'desc'],['State','asc']] ); //var options = { 'skip' : 1, // 'limit' : 4, // 'sort' : [['grade', 1], ['student', -1]] }; //var cursor = grades.find({}, {}, options); cursor.each(function(err, doc) { if(err) throw err; if(doc == null) { return db.close(); } console.dir(doc); }); 

我有一个文章模型,我想按类别search,并根据创build的date获取最新的文章,这就是我如何做到这一点

 const query = {category: "category1"}; Articles.find(query, callback).sort({created_date: -1}); 

这应该是像斯科特说的那样。

第一种方法不起作用,导致sorting被一个未定义的对象调用。 我认为这是有道理的,因为有一个callback是执行第一个。第二个方法几乎是我所需要的,但不工作,再次,findResults.sort返回一个未定义的。

我终于做了一件更简单的事情,看起来似乎成功了,但是…还是有些遗漏:

 operation.call(collection, params.selector, params.fields, params.options, function(error, result){ if (err) .... else results.sort({field:1}, callback(err, sortedResults)) } 

好吧,它暂停在“results.sort”,它仍然在等待…我不知道是什么。 看着mongodb控制台,没有查询启动。 另一方面,callback作为一个函数存在,但不叫…

然后,我试图以另一种方式做到这一点;

 var sortedResults = results.sort({field:1}; callback(err, sortedResults) 

在这种情况下,执行继续,但返回未分类的结果。

任何其他的想法? 它必须在那里….

谢谢

我find了解决scheme。

看来“toArray”不见了,否则不起作用。

 operation.call(collection, params.selector, params.fields, params.options, function(error, result) { if (error) { callback(error); } else { result.sort(params.sort).toArray(function(error, items) { ... } } 

我希望这会有所帮助