为什么使用addToSet更新此Node + MongoDB无法更新阵列

时间:2013-02-14 17:49:46

标签: node.js mongodb

我无法弄清楚这一点,我尝试使用终端执行相同的查询,但它很成功。我应该注意,同样的查询返回使用MongoHub时产生的一行,但在检查记录后没有变化。下面是mongo设置和要更新的操作。

var mongo = require('mongodb');

var Server = mongo.Server,
    Db = mongo.Db,
    BSON = mongo.BSONPure;

var server = new Server('localhost', 27017, {auto_reconnect: true});
    db = new Db('help', server, {safe: true});

type = 'issues';
id = 2;
body = { comments: '64' };

db.collection(type, function(err, collection) {
       collection.update({id:id}, {$addToSet: body}, {safe:true}, function(err, result) {
            if (err) {
                console.log('Error updating: ' + err);
                res.send({'error':'An error has occurred'});
            } else {
                console.log('' + result + ' document(s) updated');
                res.send(type);
            }
        });
    });

//Mongo Collection Record
{ "_id" : ObjectId( "511c000d994cde0d02adf1ba" ),
  "comments" : [ 
    1, 
    2, 
    3 ],
  "id" : 2,
  "text" : "This is another issue test",
  "title" : "Another Issue Test" }

非常感谢任何帮助

2 个答案:

答案 0 :(得分:1)

结果我没有将变量id解析为我从req.params获取的整数,我应该包括我从req.params对象中获取id。

var id = parseInt(req.params.id);

解决了这个问题。

答案 1 :(得分:0)

这部分似乎有一些问题

db.collection(type, function(err, collection) {
   collection.update({id:id}, {$addToSet: body}, {safe:true}, 

我没有看到第一行中定义了哪个类型变量。这意味着可能找不到该集合。但是你没有在两行之间检查这个问题的错误。

在更新语句中,你应该有{_id:ObjectId(id)},其中id应为511c000d994cde0d02adf1ba。

这些问题似乎很明显。