2017-11-26 11 views
0

.updateMany(フィルター、更新、オプション)を使用する場合。どのようにすべてのドキュメントの動的フィルタフィールドを設定できますか?MongoDB updateMany、動的フィルターフィールド

[ 
    { 
     time: 1, 
     data: [] 
    }, 
    { 
     time: 2, 
     data: [] 
    }, 
    { 
     time: 3, 
     data: [] 
    } 
] 

それぞれ独自のタイムスタンプを持つ:

は、私はこのような文書の配列を持っています。タイムスタンプがすでに存在する場合は、対応する文書を新しいデータで更新する必要がありますが、時間が存在しない場合は、新しい文書を作成してください。

https://docs.mongodb.com/manual/reference/method/db.collection.updateMany/

しかし、それは思えるよう、.updateManyは()のみ静的フィルタフィールドを可能にします。この

Candles.updateMany({time: 'someStaticTime'}, documents); 

と同じように、私はこの

Candles.updateMany({time: $currentInsertingDocument.time}, documents); 

のようなものを好むだろうしながら、各文書の別々のをループなしで可能です。この??

+0

あなたは何をしたいですか?私はそれは "時間が既に存在する場合、ドキュメントは更新する必要があります、それ以外の新しい時間を作成する"と私はそれは新しいタイムスタンプ、いいえにすべての時間フィールドを設定すると言ってストライクとして読む? –

+0

質問を更新しました。そして確かに正しかった、その文書の配列、一意のインデックスキーは一意のタイムスタンプです。したがって、既に存在するタイムスタンプを持つドキュメントがある場合は、そのドキュメントを更新する必要があります。それ以外の場合は新しいドキュメントを作成します。しかし、動的フィールドとして時間フィールドをフィルタリングし、内部で – DutchKevv

+1

私はあなたが 'バルク' APIを使うべきだと思います:https://docs.mongodb.com/manual/reference/method/Bulk.find.upsert/ – Michael

答えて

関連する問題