[英]how to update nested object of mongoose document for only provided keys
我將根據提供的密鑰更新mongoose文檔的某些字段。 例如,當我們在json中呈現mongoose文檔時。
user: {
address: {
city: "city"
country: "country"
}
}
更新params就是這樣給出的。
address: {
city: "city_new"
}
當我像這樣運行mongoose api時。
let params = {
address: {
city: "city_new"
}
}
User.set(param)
它取代了整個地址對象,最終結果是
user: {
address: {
city: "city_new"
}
}
它只是替換地址字段,但我只想更新城市字段。 這是期望的結果。
user: {
address: {
city: "city_new"
country: "country"
}
}
如何在貓鼬中做到這一點?
當嵌套對象具有更復雜的層次結構時,如何在不手動指示address.city.field1.field2. ...
字段的情況下解決此問題address.city.field1.field2. ...
address.city.field1.field2. ...
謝謝
當嵌套對象具有更復雜的層次結構時,如何在不手動指示address.city.field1.field2之類的字段的情況下解決此問題。
由於大多數答案暗示,您必須使用點表示法來更新嵌入的文檔並回答上述問題,使用以下幫助方法應用遞歸將給定對象轉換為其點表示法表示:
function convertToDotNotation(obj, newObj={}, prefix="") { for(let key in obj) { if (typeof obj[key] === "object") { convertToDotNotation(obj[key], newObj, prefix + key + "."); } else { newObj[prefix + key] = obj[key]; } } return newObj; } let params = { address: { city: { location: { street: "new street" } } } }; const dotNotated = convertToDotNotation(params); console.log(JSON.stringify(dotNotated, null, 4));
這應該工作:
let params = {
"address.city": "city_new"
}
User.set(param)
在$ set的文檔中,您還會找到以下注釋:
要在嵌入文檔或數組中指定<field>,請使用點表示法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.