Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 美元($)前缀字段'$addToSet';在'$addToSet';对存储无效_Mongodb - Fatal编程技术网

Mongodb 美元($)前缀字段'$addToSet';在'$addToSet';对存储无效

Mongodb 美元($)前缀字段'$addToSet';在'$addToSet';对存储无效,mongodb,Mongodb,我一直在尝试使用node.js api在findAndModify查询中使用$addToSet。但我收到一个错误,即前缀字段$addToSet对存储无效。查询使用MongoShell客户端工作,但不使用api MongoClient.connect(config.mongo.uri, function(err, db) { assert.equal(null, err) console.log('Connected to mongodb'); db.collection(

我一直在尝试使用node.js api在findAndModify查询中使用$addToSet。但我收到一个错误,即前缀字段$addToSet对存储无效。查询使用MongoShell客户端工作,但不使用api

MongoClient.connect(config.mongo.uri, function(err, db) {
    assert.equal(null, err)
    console.log('Connected to mongodb');
    db.collection(‘users’).findAndModify(
         {‘username’: ‘foo’}, 
         [], 
         {$addToSet: {roles: “somerole”}}, 
         {upsert: true, new: true}, function(err, user) {
         if (err) console.log(err});
    });
上面的代码给了我一个错误,抱怨设置了一个以受保护关键字$addToSet开头的字段。此错误:

MongoError:异常:“$addToSet”中以美元($)为前缀的字段“$addToSet”对存储无效

版本: mongod:2.6.6
node mongodb:1.4.31

在2.6中进行了更改,我重写了代码以使用find/update

MongoClient.connect(config.mongo.uri, config.mongo.options, function(err, db) {
    assert.equal(null, err)
    console.log('Connected to mongodb');

    db.collection('users').find({'username': username}, function(err, user) {
        var user_data = {'username': username}
        if (user) {
            user_data['$addToSet'] = { roles: item['RolesRoleName']};
            db.collection('users').update({_id: user._id}, user_data, function(err, user) {
                if (err) console.log(username, err);
                console.log("Updated", username);
            });
        } else {
            user_data['roles'] = [item.IsSuperUser == "TRUE" ? "admin" : "user"];
            db.collection('users').save(user_data, function(err, user) {
                if (err) console.log(username, err);
                console.log("Added", username)
        });
    });
});

当我尝试它时,它工作得很好,但我确实需要将智能引号更改为普通引号。不确定这是否只是一个复制粘贴问题。