2012-02-05 17 views
7

Próbuję zwiększyć wartość w kolekcji w mojej bazie danych MongoDB poprzez Mongoose. Jest to kod demo pokazane na stronie Mongoose:Zwiększenie jednego pola w kolekcji MongoDB z Mongoose

var conditions = { name: 'borne' } 
    , update = { $inc: { visits: 1 }} 
    , options = { multi: true }; 

Model.update(conditions, update, options, callback) 

I mam coś takiego:

var conditions = { "uniqueId" : itemId }; 
var update; 
if(increase) 
    update = {$inc : {inStock : 1}}; 
else 
    update = {$dec : {inStock : 1}}; 
Item.update(conditions, update, {}, callback); 

Jak widać nie ma zbyt dużej różnicy z Mangusta w kodzie strony.

Problem polega na tym, że kiedy ten fragment kodu jest wykonywana, I skończyć posiadające w swojej kolekcji jedno pole o nazwie $dec (lub $inc), który ma obiektu jako pola w formularzu {inStock : 1}. Chciałbym tylko zwiększyć wpis w kolekcji inStock. W schemacie mam:

var ItemToSell = new Schema({ 
    uniqueId : { type: Number, index: true } 
    , name  : String 
    , type  : String 
    , inStock : Number 
}); 

Czy ktoś może wskazać, co robię źle? Wielkie dzięki.

Odpowiedz

3

A) Upewnij się, że jesteś Mongoose jest aktualny. Starsze wersje były bardzo błędne w operacjach Model.update, ponieważ Mongoose próbuje wywnioskować, kiedy tylko przekazuje nowy obiekt, w takim przypadku zamienia on twój obiekt update w operację .

B) Spróbuj usunąć pusty {} ze swojego wywołania funkcji. Jest to opcjonalne, a przekazując pusty obiekt zamiast rzeczywistych opcji, możesz wprowadzać zamieszanie w ustawienie opcji { safe: false }, co również może być przyczyną problemu. Nie sprawdziłem kodu źródłowego, aby potwierdzić, że to może być problem, ale prawdopodobnie warto spróbować.

+0

Dzięki za odpowiedź. Po usunięciu pustego '{}' rozwiązałem problem, który powodował '{" $ dec ": {" inStock ": 1}}' do dodania do kolekcji. Miałeś rację także z tym, że używałem starej wersji Mongoose, ALE nadal nie rozwiązałem problemu. Teraz wydaje się, że nie robi nic w kolekcji. – Masiar

+4

OK Rozwiązałem problem. Wprowadzenie 'err' funkcji wywołania zwrotnego dało coś teraz, że aktualizuję moją wersję Mongoose. Odkryłem, że '$ dec' nie istnieje, więc aby zmniejszyć, muszę wprowadzić ujemną kwotę (' {$ inc: {inStock: -1}}). Dzięki za spróbowanie, bardzo pomogło! – Masiar

+0

Czy wiesz jak "** inStock **" jako parametr? –

Powiązane problemy