単一のフィールドを更新する方法を理解できないようです。
私が何をしようとも、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行のprofile.picture)、これは機能します。
Meteor.users.update(
userId,
{
$set: {
'profile.picture': fileURL
}
}
);
流星フォーラム で@coagmanoが答えました==
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メガバイトです。