使用findAndModify时,将函数参数作为$ set运算符中的字段名称传递

时间:2016-04-27 19:36:30

标签: javascript node.js mongodb

我有以下功能:

module.exports.saveClient = function(name) {
    db.myDatabase.findAndModify({
        query: { _id: 'clients' },
        update: { $set: { clients: { name: {
                                        'name': name,
                                        'projects':{}
                                        }
                }}},
        new: true
    }
};

当我调用这样的函数时:

myModule.saveClient(clientName);

在$ set运算符中,它将其读作:

update: { $set: { 'clients': { 'name': {
                                        'name': clientName,
                                        'projects':{}
                                        }
                }}}

因此,字段名称将转换为字符串,我想要第一个名称'成为' clientName' (作为参数传递给我的函数的值)。

1 个答案:

答案 0 :(得分:1)

如果要将object属性放在变量中,则需要使用 square bracket notation 来构造字段对象,如下所示:

module.exports.saveClient = function(name) {
    var clients = {};
    clients[name] = {
        'name': name,
        'projects':{}
    };
    db.myDatabase.findAndModify({
        query: { _id: 'clients' },
        update: { $set: { clients: clients }},
        new: true
    }
};

或使用computed property names (ES6)

module.exports.saveClient = function(name) {
    let clients = {
        [name]: {
            'name': name,
            'projects':{}
        }
    }
    db.myDatabase.findAndModify({
        query: { _id: 'clients' },
        update: { $set: { clients: clients } },
        new: true
    }
}