2012-01-24 20 views
5

Mam model mongoose w mojej aplikacji node.js, reprezentujący faktury. Większość już to wymyśliłem, ale naprawdę muszę upewnić się, że moje faktury są numerowane/zwiększane, aby móc podać odpowiednie odniesienie do mojego klienta.Zwiększanie wartości za pomocą mangusty?

Korzystając z bazy danych SQL, utworzyłbym kolumnę AUTO-INCREMENT z tą wartością, ale to nie jest wbudowane w MongoDB. Więc jak to osiągnąć z mongoose?

Oto jak mój model wygląda teraz:

var InvoiceSchema = new Schema({ 
    reference: {type: Number, default: 0}, // The property I want to auto-incr. 

    dates: { 
     created: {type: Date, default: Date.now}, 
     expire: {type: Date, default: expiryDate()} 
    }, 

    amount: {type: Number, default: 0} 
    // And so on 
}); 

Odpowiedz

4

Generalnie w MongoDB, jeden nie wykorzystuje wzór automatycznego przyrostu dla _id (lub innych dziedzin), jak to nie skaluje się dobrze na dużych klastrach baz danych. Zamiast tego zazwyczaj używa się identyfikatorów obiektów.

Aby uzyskać więcej informacji checkout ten link: http://www.mongodb.org/display/DOCS/How+to+Make+an+Auto+Incrementing+Field

Więc dolnej linii można po prostu wykorzystać identyfikatory obiektów, to są unikalne.

+0

Odpowiedziałem na to pytanie również, nie ma za co. – alessioalex

1

Czy this czego szukasz?

Powiedzmy UserSchema i InvoiceSchema wygląda następująco:

var UserSchema = new Schema({ 
    email: String, 
    // other fields 
    invoices: [{ type: Schema.Objectid, ref: 'Invoice' }] 
}); 

var InvoiceSchema = new Schema({ 
    reference: { type: Schema.Objectid, ref: 'User' }, 

    dates: { 
     created: {type: Date, default: Date.now}, 
     expire: {type: Date, default: expiryDate()}, 
    }, 

    amount: {type: Number, default: 0} 
    // And so on 
}); 
24
Controller.findByIdAndUpdate(ID_HERE, {$inc: {next:1}}, function (err, data) { 


}); 

// obok znajduje się pole, typ: Numer

+0

Dokładnie tego, czego szukałem. Dzięki! – danyim

+0

Idealny - dzięki! – JoeTidee

+0

Aby uzyskać tytuł pytania, jest to odpowiedź, której większość osób będzie szukać. –

0

riffy na keithic za odpowiedź:

Możesz dodać dodatkowy obiekt, aby upewnić się, aby otrzymać dokument po to został zwiększony, a takie , Używam lean() i exec(), aby upewnić się, że dokument jest zwykłym obiektem JavaScript:

Controller.findByIdAndUpdate(ID_HERE, {$inc: {next:1}}, { $new: true}) 
    .lean().exec(function (err, data) { 


}); 
Powiązane problemy