我正在尝试在GraphQL解析器中做一些非常简单的事情:将数据从一个集合转储到另一个。
这在mongo shell中有效
db.srcColl.aggregate([{$out: "foobarbaz"}])
这在Node中不起作用
db.collection("srcColl").aggregate([
{$out: "foobarbaz"}
])
没有引发任何错误,它什么也没做。
前后都有一个控制台日志,所以我知道它正在运行。我试图用异步/等待以及回调来做到这一点。
有人知道为什么会发生这种情况吗?
mongodb v3.5.5
答案 0 :(得分:0)
此代码基于节点mongodb驱动程序网站上的聚合文档。 MongoDB NodeJS 3.6 driver documentation
注意:由于您在管道中使用了$ out运算符,因此不会返回任何结果。您可以通过注释掉$ out行来验证聚合是否正常工作。
const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');
// Connection URL
const url = 'mongodb://0.0.0.0:27017';
// Database Name
const dbName = 'dbname';
// Create a new MongoClient
const client = new MongoClient(url);
// Use connect method to connect to the Server
client.connect(function (err, client) {
assert.equal(null, err);
console.log("Connected correctly to server");
const db = client.db(dbName);
simplePipeline(db, function () {
client.close();
});
});
function simplePipeline(db, callback) {
const collection = db.collection('srcColl');
collection.aggregate([
//[{ '$match': { "borough": "Bronx" } },
{ '$out': 'foobazbar' },
],
function (err, cursor) {
assert.equal(err, null);
cursor.toArray(function (err, documents) {
console.log(documents)
callback(documents);
});
}
);
}
来源集合:
> db.srcColl.find()
{ "_id" : ObjectId("5ec82abbed4a7db1b6d414fc"), "name" : "tom" }
{ "_id" : ObjectId("5ece58d6a61e6a47b8dd85cc"), "name" : "baz" }
{ "_id" : ObjectId("5ece58d95630d9f3b9aef91e"), "name" : "foo" }
运行以上代码后的目标集合:
> db.foobazbar.find()
{ "_id" : ObjectId("5ec82abbed4a7db1b6d414fc"), "name" : "tom" }
{ "_id" : ObjectId("5ece58d6a61e6a47b8dd85cc"), "name" : "baz" }
{ "_id" : ObjectId("5ece58d95630d9f3b9aef91e"), "name" : "foo" }
答案 1 :(得分:0)
我已经接受了dJackson的回答,但总而言之,我错过了toArray()
。
所以不是
db.collection("srcColl").aggregate([{$out: "foobarbaz"}])
我只需要
db.collection("srcColl").aggregate([{$out: "foobarbaz"}]).toArray()