最新 MongoDB 版本 (2.6) 中的一项更改导致游标由聚合查询返回。这非常有用,因为它允许更有效地处理非常大的查询结果集。不过,我在我的节点应用程序中使用它时遇到了麻烦。
如何使用 mongoskin 检索这批结果?
我试过了:
var db = require('mongoskin').db('mongodb://localhost:27017/test');
var collection = db.collection("ag");
var cursor = collection.aggregate([{ $group : {_id: '$a'}}])
cursor.toArray(function(err, result) {
console.log(result);
db.close();
});
结果是什么:
TypeError: Object #<SkinClass> has no method 'toArray'
at Object.<anonymous> (/Users/.../aggregation.js:5:8)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:902:3
我发现使用本机驱动程序,以下代码可以工作(使用 get 并设置 batchSize):
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect("mongodb://localhost:27017/test", function(err, db) {
var collection = db.collection("ag");
var cursor = collection.aggregate([{ $group : {_id: '$a'}}], {cursor:{batchSize:100}});
cursor.get(function(err, result) {
console.log(result);
db.close();
});
});
但它在 mongoskin 上失败了。
检索整个聚合结果是 mongoskin (下)的唯一选择还是我遗漏了什么?
var cursor = collection.aggregate([{ $group : {_id: '$a'}}], function(err, result) {