Mongoose:使用Schema.Types.Mixed动态创建密钥

时间:2016-03-04 15:37:02

标签: node.js mongodb mongoose

这是我的架构:

var Account = new Schema({
    username: String,
    likes: Schema.Types.Mixed
})

我将&some 39?属性添加到喜欢中。一切正常。

var conditions = {'_id':req.body.id};
var update = {'$set':{'likes.someProperty': req.body.something}};
var callback = function (err, data) {
    if (err) return next(err);
};
users.update(conditions, update, callback);

更新我的文档后:

'username': Fat Gandalf,
'likes': {
           someProperty: '100'
         }

我的问题是,我不知道某些属性的名称'。我需要以某种方式动态创建它:

var temp = 'likes.' + req.body.propertyName; // -- > 'likes.anything'
var update = {'$set':{temp: req.body.something}};

以上示例不起作用。他妈的!需要你的帮助!

1 个答案:

答案 0 :(得分:1)

使用 square bracket notation 构建字段对象,如下所示:

var conditions = { "_id": req.body.id },
    update = { "$set": {} };

update["$set"]["likes."+req.body.propertyName] = req.body.something;
Users.update(conditions, update, callback); 

或使用computed property names (ES6)

var conditions = { "_id": req.body.id },
    update = { 
        "$set": {
            ["likes."+req.body.propertyName]: req.body.something
        } 
    };
Users.update(conditions, update, callback);