使用if / else mongodb-update缩短JS函数

时间:2015-11-27 14:36:40

标签: javascript mongodb mongodb-query

是否可以将此功能缩短一点?我不喜欢if / else更新,这几乎是一样的。唯一的区别是'status.edited': false只应该设置,如果method = reset。否则不应修改。

function updateVersion(id, method) {
    var timestamp = new Date().getTime();

    if (method == 'reset') {
        Collection.update(
            { _id: id }, 
            { 
                $set:   { 'status.version': timestamp, 'status.edited': false },
                $unset: { 'status.editing': '' }
            }
        );
    }
    else {
        Collection.update(
            { _id: id },
            { 
                $set:   { 'status.version': timestamp },
                $unset: { 'status.editing': '' }
            }
        );      
    }

}

2 个答案:

答案 0 :(得分:2)

您可以像这样动态构建查询:

function updateVersion(id, method) {
    var timestamp = new Date().getTime();
    var update = { 
        '$set': { 'status.version': timestamp },
        '$unset': { 'status.editing': '' } 
    };

    if (method === 'reset')
        update['$set']['status.edited'] = false;

    Collection.update( { '_id': id }, update );
}

答案 1 :(得分:1)

为动态属性创建一个对象,并将其传递给查询。

var set = {
    'status.version': timestamp
};

if(method === 'reset') {
    set['status.edited'] = false;
}

Collection.update({
    _id: id
}, {
    $set: set,
    $unset: {
        'status.editing': ''
    }
});