使用Nodejs和MongoDB,我是nodejs的新手。我需要知道如何从一个集合中获取数据并附加一些额外的数据并插入到另一个集合中。
db.collection('collection1').find({ "Id" : 12345 }).toArray(function(err, result){
db.collection('collection2', function(err, collection){
collection.insert({
//some data
})
})
})
当我尝试使用此代码时,它不起作用,它给出了我错误插入没有定义。
感谢, 约翰。
答案 0 :(得分:0)
db.collection('collection1').find({ "Id" : 12345 }).toArray(function(err, result){
//do the modification here
db.collection('collection2').insert(modifiedResult, function(err, result){
if(err) {
//log error
}else{
//log result
}
})
})
还有一件事,如果结果数组长度超过那个,你想分别插入然后使用promise
db.collection('collection1').find({ "Id" : 12345 }).toArray(function(err, result){
//do the modification here
Promise.all(modifiedResult.map((eachModifiedResult)=>{
return db.collection('collection2').insert(eachModifiedResult);
}).then((result)=>{
//result of the insert
}).catch((err){
//err if any happen
});
})
但如果你有一个非常大的文档,那么就像Neil Said那样做。使用游标逐个读取集合并修改它们并将它们插入到其他数据库中。
答案 1 :(得分:0)
var collectionData = null;
var modifiedResult = null;
//这里我使用异步库来避免callbackHell
async.series([
// for get data from collection 1.
function(cb) {
var criteria = {
"Id": 12345
}
db.collection('collection1').find(criteria).toArray(function(dbErr, dbResult) {
if (err) {
cb(dbErr)
} else {
collectionData = dbResult;
cb()
}
})
},
// Append Data in collectionData
function(cb) {
// do you work here to append data in collectionData
modifiedResult = extendedData; // this is just an example you need to work on it
cb();
},
// Update collection 2 here
function(cb) {
db.collection('collection2').insert(modifiedResult, function(err, result) {
if (err) {
cb(dbErr)
} else {
collectionData = dbResult;
cb()
}
});
}
]);