我正在做关于MongoDB的在线课程,不幸的是有点过时了。似乎有些功能已经改变(当然我使用的是1.4版本。)
以下是我遇到问题的代码,我试图更新当前版本的MongoDB:
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect('mongodb://localhost:27017/course', function(err, db) {
if (err) throw err;
db.collection['counters'].findAndModify({
query: {
name: 'comments'
},
update: {
$inc: {
counter: 1
}
},
new: true
}, function(err, doc) {
if (err) throw err;
if (!doc) {
console.dir('No counter found for comments.');
} else {
console.dir('Number of comments: ' + doc.counter);
}
return db.close();
});
});
如果我通过Mongo shell运行相同的findAndModify,我会得到预期的结果(递增计数器并显示新文档),但是当我使用node运行它时,它对数据库没有影响并抛出此错误:
TypeError: Cannot call method 'findAndModify' of undefined
任何提示?
答案 0 :(得分:1)
请尝试:
db.counters('counters').findAndModify
而不是:
db.collection['counters'].findAndModify
答案 1 :(得分:1)
哎呀,我只是错误的括号。应该有:
db.collection('counters')
而不是
db.collection['counters']
几乎像T_G说的那样。
答案 2 :(得分:1)
立即使用:
db.collection('counters').findOneAndUpdate(
{name: 'comments'}, //query
{$inc: {counter: 1}}, //update
{ //options
upsert: true, // create the doc when it's not there
returnOriginal:false // return the modified doc *(new is not supported here!)
},
function(err, r){ //callback
if(err) throw err;
console.log('counter: '+r.value.counter);
}
);
答案 3 :(得分:0)
来自mongodb docs:
可以使用集合
打开现有集合db.collection([[name[, options]], callback);
如果禁用严格模式,则会创建新集合(如果尚未创建) 本。
所以你需要这样做:
db.collection('counters', function(err, collection){
collection.findAndModify({
query: {
name: 'comments'
},
update: {
$inc: {
counter: 1
}
},
new: true
}, function(err, doc) {
if (err) throw err;
if (!doc) {
console.dir('No counter found for comments.');
} else {
console.dir('Number of comments: ' + doc.counter);
}
});
});