mongodb jsonドキュメントを単一フィールドで更新しようとしています。私のデータがオブジェクトの配列内にあっても、理由があり、初期の設計選択を知らないと、オブジェクト内のオブジェクトだけであれば簡単になることがわかっています。Mongodb:埋め込みドキュメントにフィールドを追加する(配列なし)
私のコレクションで単一の文書の構造:
{
"_id": 123123,
"drivers_teams": {
"drivers" : {
"4" : { <data> },
"5" : { <data indeed> },
...
},
...
}
}
私は新しいオブジェクトの例に
const collection = db.get('collection');
let drivers = { };
drivers['111'] = { <new data> };
collection.update({}, {$set: { drivers_teams: { drivers } }}, { upsert: true }, function (err, doc) { ... });
を追加したい。しかし、結果は「drivers_teams」の元のオブジェクトが一掃されていることであると持っていますその中の新しいフィールドのみ。
私がしようとした場合:
collection.update({}, {$set: { drivers }}, { upsert: true }, function (err, doc) { ... });
それは非意外にここに同様の問題(+溶液)drivers_teams外の新しいフィールド "ドライバー" を
{
"_id": 123123,
"drivers" : { <new data> },
"drivers_teams": { <still original> }
}
を挿入しますが、JSONは、わたしのようにネストされていません。 https://groups.google.com/forum/#!topic/mongodb-user/ZxdsuIU94AY
私がしようとしていることを達成する方法はありますか?または、私は単一のフィールドを更新するときに、ドキュメント全体をあきらめて上書きする必要がありますか?ここ
EDIT
作業溶液は{$set: { 'drivers_teams.drivers.111': <data> }}
ですが、私が言及している必要がありますすることは、その一例キー「111」は、更新データを送信するとき、それはクライアントから実際には不明来るです。そのため、このソリューションでは新しいオブジェクトが作成されました。{ 'drivers_teams.driver.' + key: <data> }
のような記述は、エラーをスローします。dynamically name mongo key field
それだけです!どうもありがとうございます! – spiritworld