2017-10-17 65 views
0

我想要建立一個簡單的功能,可以更新(upsert)由文檔collection name, field key, field value, updateDataMongodb不能使用參數作爲更新字段過濾器密鑰?

例如:

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 }.... 

兩者有什麼區別?

回答

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 標識符(例如,具有空格或連字符的屬性名稱, 或以數字開頭)。這種表示法也是非常有用的,當財產 的名字將被動態地確定(當屬性名稱不 決定,直到運行時)

+0

它的作品,謝謝! – maxyen

+0

@maxyen歡迎您 –