Иногда становится важным иметь в базе данных настраиваемое поле с номером автоинкремента, отличным от .

Давайте рассмотрим пример книг в библиотеке. Наряду с уникальным «_id», предоставляемым mongodb, нам может понадобиться «book_id», чтобы иметь количество книг в библиотеке.

Использование ‘mongoose-auto-increment’ для реализации автоматического увеличения

«Mongoose-auto-increment» — это плагин, который автоматически увеличивает любое поле идентификатора в вашей схеме каждый раз, когда документ сохраняется.

Сначала нам нужно установить «mongoose-auto-increment».

npm install mongoose-auto-increment

Как только мы установим плагин, его будет очень просто использовать. Нам нужно получить ссылку на него, инициализировать его, передав ваше соединение с мангустом, и передать autoincrement.plugin функции plugin() в вашей схеме. В приведенном ниже примере мы видим, как мы можем использовать плагин «mongoose-auto-increment» с mongoose.

var mongoose = require('mongoose'),
    Schema = mongoose.Schema, 
    autoIncrement = require('mongoose-auto-increment');
var connection = mongoose.createConnection("mongodb://localhost/myDatabase");
autoIncrement.initialize(connection);
var bookSchema = new Schema({
author: String,
title: String,
genre: String,
publishDate: Date
});
bookSchema.plugin(autoIncrement.plugin, { model: 'Book', field: 'bookId' });
var Book = connection.model('Book', bookSchema);

Мы можем увеличить поле, такое как «bookid», как показано в приведенном выше примере. Если мы хотим, чтобы это поле начиналось с числа, отличного от нуля, или увеличивалось более чем на единицу, мы можем сделать это, как показано ниже.

bookSchema.plugin(autoIncrement.plugin, {
model: 'Book',
field: 'bookId',
startAt: 100,
incrementBy: 100
});

Создание пользовательского автоинкремента

MongoDB не предоставляет каких-либо готовых функций автоматического увеличения, таких как базы данных SQL. По умолчанию поле _id используется в качестве первичного ключа для уникальной идентификации документов.

Давайте рассмотрим следующий документ employees. Мы хотим, чтобы поле _id представляло собой целочисленную последовательность с автоматическим увеличением, начиная с 1,2,3,4 и заканчивая n.

{
  "_id":1,
  "emploee_name": "Raj",
  "company": "abc"
}

Теперь давайте создадим коллекцию counters, которая будет отслеживать последнее значение последовательности для всех полей последовательности.

>db.createCollection("counters")

Теперь давайте вставим следующий документ в коллекцию счетчиков с employeeid в качестве ключа.

> db.counters.insert({
	"_id":"employeeid",
	"sequence_value": 0
})
WriteResult({ "nInserted" : 1 })

Поле sequence_value отслеживает последнее значение последовательности.

Используйте следующий код, чтобы вставить этот документ последовательности в коллекцию счетчиков.

>db.counters.insert({_id:"employeeid",sequence_value:0})

Теперь мы создадим функцию getNextSequenceValue, которая будет принимать имя последовательности в качестве входных данных, увеличивать порядковый номер на 1 и возвращать обновленный порядковый номер. В нашем случае имя последовательности — employeeid.

>function getNextSequenceValue(sequenceName){
   var sequenceDocument = db.counters.findAndModify({
      query:{_id: sequenceName },
      update: {$inc:{sequence_value:1}},
      new:true
   });
   return sequenceDocument.sequence_value;
}

Теперь мы можем использовать функцию getNextSequenceValue, чтобы получить следующую последовательность no, как показано ниже.

>db.employees.insert({
   "_id":getNextSequenceValue("employeeid"),
   "employee_name":"Raj",
   "company":"abc"
})
>db.employees.insert({
   "_id":getNextSequenceValue("employeeid"),
   "employee_name":"Ram",
   "company":"xyz"
})

Теперь давайте посмотрим на результаты, используя поисковый запрос.

>db.employees.find()

Приведенный выше запрос вернул следующие документы с автоматически увеличивающимся полем _id.

{ "_id" : 1, "employee_name" : "Ram", "company":"abc"}
{ "_id" : 2, "employee_name" : "Raj", "company":"xyz" }

Вывод

В этом руководстве мы увидели, как вставить число автоинкремента в mongodb, используя два разных метода. Сначала использовал плагин «mongoose-auto-increment». Вторая реализация пользовательского автоинкремента.