Mongodb不能将参数用作更新字段过滤键?

时间:2017-10-17 01:59:32

标签: node.js mongodb mongodb-query

我想构建一个简单的函数,可以通过upsert

更新(collection name, field key, field value, updateData)文档

示例:

function updateDB(tableName, id, rowInfo, checkfield, callback) {
db.collection(tableName, function (err, collection) {
    if (err) {
        console.log(err);
    } else {

        console.log(checkfield);
        collection.update({ checkfield: id }, rowInfo, { upsert: true }, function (err, objects) {
            if (err) {
                throw err;
                callback(false);
            } else {
                //  console.log(objects);
                callback(true);
            }
        });
    }
});}

但是,当我在更新查询中使用参数作为字段过滤器时,它总是插入新数据而不更新文档。例如:

collection.update({ checkfield: id }.....

但是当我将字段过滤器更改为realFieldName时,它可以正常工作。例如:

collection.update({ 'realFieldName': id }....

两者有什么区别?

1 个答案:

答案 0 :(得分:0)

你应该像它一样编码:

var filter = {};
filter[checkfield] = id;
collection.update(filter, ...);

定义像{ checkfield: id }这样的对象,checkfield被视为标识符而不是变量。

有关详细信息,请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects

  

对象属性名称可以是任何有效的JavaScript字符串,或   任何可以转换为字符串的东西,包括空字符串   串。但是,任何不是有效JavaScript的属性名称   标识符(例如,具有空格或连字符的属性名称,   或者以数字开头)只能使用正方形访问   括号表示法。属性时,这种表示法也非常有用   名称将动态确定(当属性名称不是时   确定到运行时间)