Javascript MongoDB查找文档(如果存在)-更新else-插入
我和mongodb有一些麻烦。 我的代码:Javascript MongoDB查找文档(如果存在)-更新else-插入,javascript,node.js,mongodb,asynchronous,Javascript,Node.js,Mongodb,Asynchronous,我和mongodb有一些麻烦。 我的代码: for(var j = 0; j < arrayOfWords.length; ++j) { var word = arrayOfWords[j]; (function(word) { if (word.length > 2) { async.waterfall([
for(var j = 0; j < arrayOfWords.length; ++j) {
var word = arrayOfWords[j];
(function(word) {
if (word.length > 2) {
async.waterfall([
function(callback) {
collection.find({'word': word}).limit(1).toArray(function(err, data) {
log.info('find');
callback(err, data[0]);
})
},
function(data, callback) {
if (typeof data != 'undefined') {
log.info('Word found: ' + data);
unigramCollection.update({'word': word}, {'$inc' : {'sequence': 1}}, function(err, result) {
callback(err, result);
});
} else {
collection.insert({'word': word, 'sequence': 1}, function(err, result) {
log.info('Insert done!' + JSON.stringify(result));
callback(err, result);
})
}
}
],
function(err, result) {
if(err) {
log.error('error: ' + err);
} else {
log.info('done!');
}
});
}
})(word);
}
如何使操作按必要的顺序执行:查找,如果存在文档,则更新此文档,否则插入新文档而不是按每个单词的顺序执行多个操作,您可以使用mongodb执行整个操作
这将在单个操作中更新现有单词,或者在不存在的情况下使用序列1插入它。还有一个问题,如果工作数组非常大,我可以使用批量操作来完成吗?
2014-05-31T12:27:03.112Z - info: [socket/projects.js] find
2014-05-31T12:27:03.113Z - info: [socket/projects.js] find
2014-05-31T12:27:03.113Z - info: [socket/projects.js] find
2014-05-31T12:27:03.116Z - info: [socket/projects.js] Insert done![{"word":"fhhghg","sequence":1,"_id":"5389ca979a49694e2c7ac7d2"}]
2014-05-31T12:27:03.116Z - info: [socket/projects.js] done!
2014-05-31T12:27:03.117Z - info: [socket/projects.js] Insert done![{"word":"dtrtr","sequence":1,"_id":"5389ca979a49694e2c7ac7d3"}]
2014-05-31T12:27:03.117Z - info: [socket/projects.js] done!
2014-05-31T12:27:03.117Z - info: [socket/projects.js] Insert done![{"word":"jgf","sequence":1,"_id":"5389ca979a49694e2c7ac7d4"}]
2014-05-31T12:27:03.118Z - info: [socket/projects.js] done!
db.test.update({'word':word}, {'$inc':{'sequence':1}}, {'upsert':true})