ある観点からすると、答えは「いいえ」であり、それには非常に正当な理由があります。
一般的に、MongoDBの「更新」操作は、一般的に「複数の」ドキュメントであるもの全体で機能することを目的としているため、基準に一致するものは何でも意味します。したがって、ここでの一般的なケースは、単数形で更新するか、選択によって更新するように要求したものが、一致したものがあるかどうかに応じて更新されたかどうかです。
「バルク」コンテキストでは、基準が一致するかどうかにかかわらず、ほとんど同じことが当てはまります。この場合、nMatched
の戻り値が返されます。 およびnModified
繰り返しになりますが、「一致した」ドキュメントが実際に更新されない可能性もあるため、変更対象のデータがすでに変更の対象となる値になっています。
nMatched
の最後の違い およびnModified
「これを確実に行うことができない」の主な理由です。 、一致するすべてが必ずしも変更されるわけではないため。
ただし、推測を行うことはできます 「アップサート」アクションと実際の「更新」を区別する場合の値。明確な違いがあるため、100%正確ではありませんが、基本的なプロセスは、入力リストをgetUpsertedIds()
からの戻り値と比較することです。 、これは有効な呼び出しです。
現在、世界の他の地域でES6構文を使用しない:
var upserted = result.getUpsertedIds(); // get this from the bulk result
upserted = upserted.map(function(up) { return up._id }); // filter out just the _id values
var modifiedIds = edges.map(function(edge) { // get _id only from source
return edge.id;
}).filter(function(edge) {
return upserted.indexOf(edge) == -1; // and return only non upserted
});
.getUpsertedIds()
から返された結果 は、一括更新からの「インデックス」位置と、生成または提供された_id
の両方を含むオブジェクトの配列です。 「アップサート」の値。
[ { index: 0, _id: 1 } ]
したがって、入力リストを「upserted」リストと照合して、「そこにないもの」を確認します。 、基本的におそらく 変更したばかりです。もちろん、値がすでに変更と同じである場合、それは実際にはまったく変更ではないという警告があります。
しかし、APIがどのように機能するかにより、これはあなたが得ようとしているものと同じくらい近いものです。