Я хочу иметь точно автоинкрементируемое поле как реляционные или объективные базы данных, так что мне нужно поле целого _id
с автоматически устанавливаются значением поля, значение должно быть больше одна последней записью _id
значения, как это:Как я могу использовать auto-increment field в nedb?
данные:
{_id:1,name"foo"}
{_id:2,name"bar"}
удалить последняя запись:
{_id:1,name"foo"}
добавить новую запись:
{_id:1,name"foo"}
{_id:3,name"newbar"}
Я добавил функцию к моему датасторе и вычислить максимум _id и плюс 1 max(_id)+1
и установить в качестве значения поля, но есть проблема:
Когда мы используем поле автоинкрементируемого в реляционных базах данных, он работает как я сказал, и после вас remove last record
он зарезервировал номер удаленной записи, а новые вставленные записи продолжают увеличиваться, но в моем случае он говорит _id удаленной записи для новой записи.
Мой код:
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;
}