Mongodb

更新文件中的單個欄位 (document.update($set)?)

  • September 13, 2018

似乎無法弄清楚如何更新單個欄位。

無論我嘗試如何更新一個欄位(圖片:“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 兆字節。

供您進一步參考herehere

引用自:https://dba.stackexchange.com/questions/217445