web-dev-qa-db-ja.com

ドキュメントの単一のフィールドを更新する(document.update($ set)?)

単一のフィールドを更新する方法を理解できないようです。

私が何をしようとも、1つのフィールド(画像: "url")を更新するために、残りのフィールドは削除され、nullに設定されます。

今、次のコマンドを使用します。

Meteor.users.update(
          userId,
          {
            $set: {
              profile: {
                picture: fileURL
              }
            }
          }
        );

そして、これは更新後にオブジェクトの残りの部分で何が起こるかです。

{
  "data": {
    "user": {
      "_id": "J222CqhR777GcXD",
      "createdAt": "Tue Sep 11 2018 19:23:55 GMT-0400 (EDT)",
      "email": "[email protected]",
      "profile": {
        "about": null,
        "firstName": null,
        "lastName": null,
        "phone": null,
        "picture": "https://image.path/source.jpg"
      }
    }
  }
}

私が行方不明になっている別のオペレーター、またはこれを行う他の方法はありますか?

別のドキュメントでは、以前にすべてのデータを照会し、それをReact状態に保存してから、変更していないすべてのフィールドを更新に渡しますが、それはかなり非効率的で不要な手順のようです(???)

ドキュメントの残りの部分に影響を与えずに単一のフィールドだけを更新する方法は本当にありませんか?

みんな乾杯

1
Scott Agirs

このように書き直さなければなりませんでした(ドット表記の1行のprofile.picture)、これは機能します。

Meteor.users.update(
    userId,
    {
        $set: {
            'profile.picture': fileURL
        }
    }
);

流星フォーラム で@coagmanoが答えました==

1
Scott Agirs

Mongodbのドキュメントに従って ここ$ set 演算子はフィールドの値を指定された値に置き換えます。

{ $set: { <field1>: <value1>, ... } }

埋め込みドキュメントまたは配列でを指定するには、 ドット表記 を使用します。

ドット表記

MongoDBは、ドット表記を使用して配列の要素にアクセスし、埋め込みドキュメントのフィールドにアクセスします。

配列の場合

配列の要素を0ベースのインデックス位置で指定またはアクセスするには、配列名をドット(。)および0ベースのインデックス位置と連結し、引用符で囲みます。

"<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メガバイトです。

詳細については、参照 here および here

1