MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jakiś sposób na uzyskanie zmodyfikowanego IDS z operacji zbiorczych mongodb przy użyciu mongoose?

Cóż, z jednego punktu widzenia odpowiedź brzmi „nie” i jest ku temu bardzo dobry powód.

Ogólnie rzecz biorąc, operacje „aktualizacji” MongoDB są przeznaczone do pracy na tym, co zwykle jest „wieloma” dokumentami, a zatem oznacza to, co spełnia kryteria. Tak więc ogólny przypadek dotyczy tego, o co prosiłeś o aktualizację w liczbie pojedynczej lub przez wybór, albo zostało zaktualizowane, albo nie, w zależności od tego, czy coś zostało dopasowane.

W kontekście „Zbiorczym” obowiązuje w dużej mierze ta sama rzecz, w której kryteria były zgodne lub nie, w którym to przypadku otrzymasz zwrócone wartości dla nMatched i nModified odpowiednio, ponieważ istnieje również możliwość, że „dopasowany” dokument nie jest faktycznie aktualizowany, gdy obecne dane do modyfikacji są już wartością, która jest celem modyfikacji.

To ostatnie rozróżnienie między nMatched i nModified to główny powód, dla którego „nie możesz tego zrobić niezawodnie” , ponieważ nie wszystko, co jest dopasowane, jest koniecznie modyfikowane.

Możesz jednak zrobić gościnnie wartość w przypadku rozróżnienia między działaniami „upsert” a rzeczywistymi „aktualizacjami”. Nie będzie to w 100% dokładne ze względu na odnotowane rozróżnienie, ale podstawowym procesem jest porównanie twojej listy wejściowej z wartością zwróconą z getUpsertedIds() , który jest prawidłowym wywołaniem.

Obecnie unikamy składni ES6 dla reszty świata:

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
});

Gdzie zwrócony wynik z .getUpsertedIds() to tablica obiektów zawierająca zarówno pozycję „indeks” z aktualizacji zbiorczej, jak i wygenerowany lub dostarczony _id wartość "upsert".

[ { index: 0, _id: 1 } ]

Dopasuj więc swoją listę danych wejściowych do listy „przesuniętych”, aby zobaczyć „czego tam nie ma” , zasadniczo zwraca rzeczy, które prawdopodobnie właśnie zmodyfikowany. Oczywiście z zastrzeżeniem, że jeśli wartość była już taka sama jak modyfikacja, to tak naprawdę nie była to w ogóle modyfikacja.

Ale ze względu na sposób, w jaki interfejs API ma działać, jest to tak blisko, jak to tylko możliwe.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Spring Data MongoDB Lookup z agregacją potoku

  2. Przekazywanie wartości checkboxów do bazy danych za pomocą JavaScript

  3. Ciąg daty sortowania MongoDB (mm/dd/rrrr)

  4. Odczytywanie określonych wartości pól z MongodbC#

  5. Wysyłanie zapytań do MongoDB z przeglądarki przy użyciu backendu kolby