2015-01-02 14 views
7

C'è un modo integrato per incrementare automaticamente il valore di una proprietà di un modello è il loopback di Strongloop? Questo modello ha una proprietà denominata orderNumber e voglio che inizi a 1 e incrementa di 1 ogni volta che viene creato un nuovo modello. Questo modello è persistente in un DB mongo. Se il loopback di Strongloop non ha un modo integrato, quale sarebbe la migliore pratica usando javaScript, Node e mongoDB?Incremento automatico di un valore di proprietà nel modello di loopback di Strongloop

Grazie,

+0

http://docs.mongodb.org/manual/tutorial/create-an-auto-incrementing-field/ – Brian

+0

Grazie a @Brian, questo mi ha fatto partire lungo la strada giusta. – Warren

risposta

3

Ok, questa soluzione funziona ma sono bypassando loopback e il "connettore MongoDB". Ecco cosa sto facendo.

Dato un modello denominato sequenza che assomiglia a questo:

{ 
    "_id": { 
     "$oid": "54ab3ec0cc074e24144f26d7" 
    }, 
    "collection": "SpecialOrder", 
    "value": 113 
} 

sto facendo questo:

mongoConnector = app.dataSources.MyMongoDBConnectorName.connector; 

mongoConnector.collection("Sequence").findAndModify({collection: 'SpecialOrder'}, [['_id','asc']], {$inc: { value: 1 }}, {new: true}, function(err, sequence) { 
     if(err) { 
      console.log(err.message); 
     } else { 
      // Do what I need to do with new incremented value sequence.value 
     } 
    }); 

Sembra che ci dovrebbe essere una costruito nel LoopbackJS modo di fare questo. Molto da passare solo per incrementare un valore.

Grazie,

Warren Campana

1

hanno lo stesso problema, ma con Postgres. Risolto il problema con l'utilizzo della modifica della colonna 'id' manualmente nel database (impostare il tipo su SERIAL che significa incremento automatico in Postgres). Penso che il problema possa essere risolto in questo modo su qualsiasi database.

1

Desidero condividere il mio approccio, che è simile alla risposta dell'autore, ma utilizzando i metodi di Loopback. Qui è il modello Sequence ho creato:

{ 
    "name": "sequence", 
    "base": "PersistedModel", 
    "idInjection": true, 
    "options": { 
    "validateUpsert": true 
    }, 
    "properties": { 
    "name": { 
     "type": "string", 
     "required": true 
    }, 
    "value": { 
     "type": "number", 
     "required": true 
    } 
    }, 
    "validations": [], 
    "relations": {}, 
    "acls": [], 
    "methods": [] 
} 

È possibile memorizzare il maggior numero di sequenze che si desidera in questo modello. Poi creo una sequenza ho bisogno con questo script (in questo caso order sequenza):

var app = require('./server/server'); 

var Sequence = app.models.Sequence; 

Sequence.findOrCreate({ 
    where: { 
    name: 'order' 
    } 
}, { 
    name: 'order', 
    value: 0 
}, function (err) { 
    if (err) { 
    console.log(err); 
    } 
    process.exit(); 
}); 

Ora ogni Devo numero d'ordine per creare un ordine, per prima cosa aggiornare il record order in Sequence modello incrementando la sua value e quindi usalo:

var Sequence = Order.app.models.Sequence; 

Sequence.findOne({ 
    where: { 
    name: 'order' 
    } 
}) 
.then(function (orderNumber) { 
    orderNumber.value++; 
    return orderNumber.save(); 
}) 
.then(function (orderNumber) { 
    Order.upsert({ 
    orderNumber: orderNumber.value, 
    ... 
    }); 
}); 

Cheers!

Problemi correlati