2012-01-24 26 views
5

Tengo un modelo mongoose en mi solicitud node.js, que representa las facturas. Ya he calculado casi todo, pero realmente necesito asegurarme de que mis facturas se numeran/incrementen para poder proporcionar una referencia adecuada a mi cliente.Incrementando un valor con mangosta?

Usando una base de datos SQL, habría creado una columna AUTO-INCREMENT con este valor, pero obviamente no está integrada en MongoDB. Entonces, ¿cómo lograría esto con mongoose?

Así es como mi modelo se ve ahora:

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

Respuesta

4

En general, en MongoDB, uno no usa un patrón de incremento automático para de _id (u otros), ya que esto no se escala hasta bien en grandes grupos de bases de datos. En su lugar, uno normalmente usa ID de objeto.

Para obtener más información sobre pago y envío este enlace: http://www.mongodb.org/display/DOCS/How+to+Make+an+Auto+Incrementing+Field

Así que la línea de fondo que sólo puede utilizar los ID de objeto, los que son únicos.

+0

He respondido esa pregunta también, de nada. – alessioalex

1

Es this lo que busca?

Digamos UserSchema y InvoiceSchema se parece a esto:

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) { 


}); 

// siguiente es el campo, Tipo: Número

+0

Exactamente lo que estaba buscando. ¡Gracias! – danyim

+0

Perfecto - ¡gracias! – JoeTidee

+0

Para el título de la pregunta, esta es la respuesta que la mayoría de la gente estará buscando. –

0

Riffing sobre la respuesta de keithic:

Puede agregar un objeto adicional para asegurarse de recibir el documento después de que se ha incrementado, como tal , Estoy usando lean() y exec() para asegurarme de que el documento es un objeto Javascript simple:

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


});