Z jednoho úhlu pohledu je odpověď „ne“ a je pro to velmi dobrý důvod.
Obecně řečeno, operace „aktualizace“ MongoDB jsou určeny pro práci s tím, co je běžně „více“ dokumentů, tedy cokoli, co odpovídá kritériím. Obecným případem je tedy vše, co jste buď požádali o aktualizaci buď v jednotném čísle, nebo podle výběru, bylo nebo nebylo aktualizováno v závislosti na tom, zda se něco shodovalo.
V kontextu "Hromadné" platí hodně z toho samého, že buď došlo ke shodě kritérií, nebo ne, v takovém případě získáte vrácené hodnoty pro nMatched
a nModified
v tomto pořadí, protože existuje také možnost, že "shodný" dokument není ve skutečnosti aktualizován, pokud přítomná data, která mají být upravena, jsou již hodnotou, která je cílem modifikace.
Poslední rozdíl mezi nMatched
a nModified
je hlavním důvodem, proč "toto nemůžete spolehlivě udělat" , protože ne vše, co se shoduje, je nutně upraveno.
Můžete však vytvořit návrh hodnotu v případě rozlišení mezi akcemi „upsert“ a skutečnými „aktualizacemi“. Kvůli uvedenému rozdílu to nebude 100% přesné, ale základním postupem je porovnat váš vstupní seznam s hodnotou vrácenou z getUpsertedIds()
, což je platné volání.
Vyhýbání se syntaxi ES6 pro zbytek světa v současnosti:
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
});
Kde je vrácený výsledek z .getUpsertedIds()
je pole objektů obsahující jak pozici "index" z hromadné aktualizace, tak vygenerovaný nebo dodaný _id
hodnota "upsert".
[ { index: 0, _id: 1 } ]
Porovnejte tedy svůj vstupní seznam se seznamem „upserted“, abyste viděli „co tam není“ , v podstatě vrací věci, které pravděpodobně právě upraveno. Samozřejmě s upozorněním, že pokud již hodnota byla stejná jako modifikace, pak to ve skutečnosti vůbec nebyla modifikace.
Ale vzhledem k tomu, jak má API fungovat, je to tak blízko, jak se dostanete.