2013-02-03 14 views
7

Mam problem z aktualizowaniem wielu rekordów za pomocą mongoosejs i węzła. Z jakiegoś powodu aktualizuję tylko jeden rekord, nawet jeśli jest kilka dopasowań. Zauważyłem również, że wywołanie zwrotne nie uruchomi się po .update(). Nie otrzymuję żadnych komunikatów o błędach. Co tu się dzieje?aktualizowanie wielu rekordów za pomocą mongoosejs w węźle

Page.find({status:'queued'}) 
    .limit(queue_limit-queue.length) 
    .update({ status: 'active' },{ multi: true },function(err,num){ 
     console.log("updated "+num); 
     //this callback will never fire, but a single record will be updated and marked as active.                         
    }); 

Odpowiedz

14

Query#update nie akceptuje parametr options, ale Model.update robi. Więc czego chcesz przepisać to jako:

Page.update({status:'queued'}, {status: 'active'}, {multi: true}, 
    function(err, num) { 
     console.log("updated "+num); 
    } 
); 

Nie jestem pewien, co staraliśmy się zrobić z wezwaniem w łańcuchu limit, ale nie można używać, że w aktualizacji.

UPDATE

Powyższe zapytanie zaktualizować wszystkie dokumenty gdzie {status: 'queued'}. Twoje jedyne wybory z update to tylko jeden pasujący {multi: false} lub wszystkie dopasowania {multi: true}.

Brzmi jak trzeba przerobić rzeczy wziąć dokumenty off kolejce po jednym naraz i przełączać się findOneAndUpdate zamiast update więc masz dostęp do dokumentu zaktualizowaniu od 'queued' do 'active'.

+0

Celem limitu jest sprawienie, że zaktualizuję tylko 10 rekordów. Twoje zapytanie wygląda na to, że zaktualizuje wszystko za pomocą '{status: 'w kolejce'}'. Potrzebuję również pierwszego wywołania zwrotnego, którego użyłem w moim przykładzie, aby zobaczyć, jakie rekordy się zmieniam (a nie tylko liczbę). – devnill

+0

@devnill mongodb nie obsługuje jeszcze ograniczonej aktualizacji – Sammaye

+0

@devnill To prawda. Zobacz aktualizację dla alternatywy. – JohnnyHK

Powiązane problemy