MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Има ли начин да получите модифицирания IDS от груповите операции на mongodb с помощта на mongoose?

Ами от една гледна точка отговорът е „не“ и има много добра причина за това.

Най-общо казано, операциите за „актуализация“ на MongoDB са предназначени да работят в това, което обикновено е „множество“ документи, следователно означава каквото отговаря на критериите. Така че общият случай тук е всичко, което или поискахте да бъде актуализирано в единствено число, или чрез избор, или беше актуализирано, или не, в зависимост от това дали има съвпадение.

В контекста на „Групово“ важи почти същото нещо, тъй като има или съвпадение на критерии, или не, в който случай ще получите върнати стойности за nMatched и nModified респективно, тъй като има и възможност „съвпадащият“ документ да не бъде действително актуализиран, когато наличните данни за модифициране вече са стойността, която е целта на модификацията.

Това последно разграничение между nMatched и nModified е основната причина "не можете надеждно да направите това" , тъй като не всичко съвпадащо е непременно модифицирано.

Можете обаче да направите предварителна оценка стойност в случай на разграничаване между действията „upsert“ и действителните „актуализации“. Няма да е 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 стойност на "upsert".

[ { index: 0, _id: 1 } ]

Така че съпоставяне на вашия входен списък с "повторения" списък, за да видите "какво го няма" , основно връща неща, които са вероятно просто модифициран. Разбира се, с уговорката, че ако стойността вече е същата като модификацията, тогава това наистина не е никаква модификация.

Но поради начина, по който API е предназначен да работи, това е възможно най-близо.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да добавя метод на схема в mongoose?

  2. Регистриране на MongoDB заявки с Spring Boot

  3. Оптимизация на заявките на MongoDB

  4. Изключение за сериализация на Scala със стойност на изброяване

  5. Mongoose {strict:throw} не извежда грешка