2016-09-29 65 views
1

假設我在數據庫中有一個具有以下結構的文檔;如何用node.js中的動態字段更新文檔

id: 1, 
name: alex, 
age: 21 

客戶端和同一文檔有一些更新,id:1返回爲;

id: 1, 
name: alex, 
age: 21, 
location: usa 

其中增加了新字段location

我想更新數據庫中的文檔。我想添加這個新插入的字段,但我無法找到如何處理這種情況。由於location不是靜態的,因此可以是surname,job等等。所以新插入的字段是動態的,我不知道提前。

如果字段location是靜態的,我可以寫一個查詢爲;

db.collection("user").updateOne({id: 1}, 
        {$set: {name: "alex", age: "21", location: "usa"}}, function(err, result){ 
    if(err){} 
    else{} 
}); 

但現在,我該如何使用這個新添加的字段更新文檔?

+0

所以你的問題似乎更多的是關於你如何查詢,而不是你如何更新?插入文檔與其他任何時間沒有區別,除非您通過貓鼬或類似方式強制實施模式。 – Paul

+0

但我正在設置字段,如在示例中。現在,我該如何設置它們?事先不知道這些字段。我無法更新ID爲1的文檔。 – user6468132

回答

2

如果你說你有一個更新的對象:

id: 1, 
name: alex, 
age: 21, 
location: usa 

那麼我認爲你有一些對象,它的數值爲:

{ 
    id: 1, 
    name: 'alex', 
    age: 21, 
    location: 'usa' 
} 

例如作爲解析此JSON從客戶端發送的結果:

{ 
    "id": 1, 
    "name": "alex", 
    "age": 21, 
    "location": "usa" 
} 

如果你有一個名爲object變量對象,那麼所有你需要做的是:

db.collection("user") 
    .updateOne({id: object.id}, {$set: object}, function (err, result) { 
    if (err) { 
     // handle success 
    } else { 
     // handle success 
    } 
}); 

但最有可能,您將需要使用_id而不是id

db.collection("user") 
    .updateOne({_id: object._id}, {$set: object}, function (err, result) { 
    if (err) { 
     // handle success 
    } else { 
     // handle success 
    } 
}); 

如果你希望能夠去除性能以及隨後甚至可能:

db.collection("user") 
    .replaceOne({_id: object._id}, object, function (err, result) { 
    if (err) { 
     // handle success 
    } else { 
     // handle success 
    } 
}); 

我不建議把數據存入數據庫沒有至少某種驗證,但它可能做你問在上面顯示的方式是什麼。

欲瞭解更多信息,請參閱:

Introduction to MongoDB in Node.js