我一直在尝试使用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});
});
上面的代码给我一个错误,抱怨设置一个以受保护的关键字$ addToSet开头的字段:
MongoError:exception:美元($)前缀字段' $ addToSet' in' $ addToSet'对存储无效。
版本: mongod:2.6.6 node mongodb:1.4.31
答案 0 :(得分:0)
随着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)
});
});
});