Mongodb
更新文件中的單個欄位 (document.update($set)?)
似乎無法弄清楚如何更新單個欄位。
無論我嘗試如何更新一個欄位(圖片:“url”),其餘欄位都將被刪除並設置為空。
我現在使用以下命令:
Meteor.users.update( userId, { $set: { profile: { picture: fileURL } } } );
這就是更新後對象的其餘部分發生的情況。
{ "data": { "user": { "_id": "J222CqhR777GcXD", "createdAt": "Tue Sep 11 2018 19:23:55 GMT-0400 (EDT)", "email": "scott@example.com", "profile": { "about": null, "firstName": null, "lastName": null, "phone": null, "picture": "https://image.path/source.jpg" } } } }
是否有另一個我失踪的運營商或其他方式來做到這一點?
在另一個文件中,我之前查詢了所有數據,將其儲存為 React 狀態,然後將我沒有更改的所有欄位傳遞給更新,但這似乎相當低效且不必要的步驟(???)
真的沒有辦法只更新一個欄位而不影響文件的其餘部分嗎?
歡呼伙計們
不得不像這樣重寫(profile.picture 在一行中用點表示法),這有效:
Meteor.users.update( userId, { $set: { 'profile.picture': fileURL } } );
@coagmano 在流星論壇上回答
根據此處的mongodb 文件$set運算符將欄位的值替換為指定的值。
{ $set: { <field1>: <value1>, ... } }
要在嵌入文件或數組中指定 a,請使用點表示法。
點符號
MongoDB 使用點符號來訪問數組的元素和訪問嵌入文件的欄位。
對於數組
要通過從零開始的索引位置指定或訪問數組的元素,請將數組名稱與點 (.) 和從零開始的索引位置連接起來,並用引號引起來:
"<array>.<index>"
例如,給定文件中的以下欄位:
{ ... contribs: [ "Turing machine", "Turing test", "Turingery" ], ... }
對於嵌入式文件
要使用點表示法指定或訪問嵌入文件的欄位,請將嵌入文件名稱與點 (.) 和欄位名稱連接起來,並用引號引起來:
"<embedded document>.<field>"
例如,給定文件中的以下欄位:
{ ... name: { first: "Alan", last: "Turing" }, contact: { phone: { type: "cell", number: "111-222-3333" } }, ... }
- 要在名稱欄位中指定最後命名的欄位,請使用點表示法**
"name.last"
**。- 要在聯繫人欄位中指定電話文件中的號碼,請使用點表示法**
"contact.phone.number"
**。**注意:**最大 BSON 文件大小為 16 兆字節。