Ich möchte genau wie relationalen oder Ziel-Datenbanken Autoinkrement-Bereich haben, so brauche ich eine Feld integer _id
mit automatisch Feldwert, sollte Wert ein last Datensatz _id
Wert wie folgt sein:Wie kann ich Auto-Inkrement-Feld in Nedb haben?
Daten:
{_id:1,name"foo"}
{_id:2,name"bar"}
entfernen letzter Datensatz:
{_id:1,name"foo"}
neue Datensatz hinzufügen:
{_id:1,name"foo"}
{_id:3,name"newbar"}
Ich habe eine Funktion zu meinem Datenspeicher und berechnen maximal _id und plus 1 max(_id)+1
und als Feldwert festgelegt, aber es gibt ein Problem hier:
Wenn wir Autoinkrement-Feld in relationalen Datenbanken verwenden, es funktioniert wie Ich sagte und nach Ihnen remove last record
reserviert es eine gelöschte Datensatznummer und neue eingefügte Datensätze fortfahren Inkrement, aber auf meine Art sagt es die _id des entfernten Datensatzes für neuen Datensatz.
Mein Code ist:
var Datastore = require('nedb'),
localDb = new Datastore({
filename: __dirname + '/dbFilePath.db',
autoload: true
});
localDb.getMax = function(fieldName, onFind){
db.find({}).sort({_id:-1}).limit(1).exec(function (err, docs) {onFind && onFind(err, docs['_id']);});
return localDb;
}
localDb.insertAutoId = function(data, onAdd){
var newIndex = 0;
localDb.getMax(function (err, maxValue) {
newIndex = maxValue+1;
if(!data["_id"])
data["_id"] = newIndex;
localDb.insert(data, function (err, newDoc) {
onAdd && onAdd(err, newDoc);
});
});
return localDb;
}