我一直在尝试使用node.js api在findAndModify查询中使用$ addToSet。但是我收到一个错误消息,前缀字段$ addToSet对于存储无效。该查询使用mongo shell客户端运行,但不适用于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});
    });

上面的代码给我一个错误,提示我设置了一个以 protected 关键字$ addToSet开头的字段,该错误是:



版本:
mongod:2.6.6
节点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)
        });
    });
});

关于mongodb - '$addToSet'中以美元($)为前缀的字段 '$addToSet'无效,无法存储,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28728531/

10-09 21:28