Автоинкремент Mongoose вызывает ошибку дубликата ключа - PullRequest
0 голосов
/ 28 октября 2018

У меня есть схема Мангуста с именем city с полем автоинкремента с именем "id" , эта схема содержит массив другой схемы с автоинкрементом с именем "marker" .Проблема в том, что когда я вставляю город без маркеров, я получаю эту ошибку:

BulkWriteError: E11000 Коллекция дубликатов ошибок ключа: bd.cities index: markers.id_1 dup key: {: null}

Я попытался использовать свойство sparse и перехватить список предустановок города и установить массив маркеров неопределенным, но я действительно застрял с этой ошибкой.

схема города:

            let mongoose = require('mongoose');
            let autoIncrement = require('mongoose-auto-increment');
            let Marker = require('./marker');
            var MarkerSchema = require('mongoose').model('marker').schema;

            let citySchema = mongoose.Schema({
               id: {
                type: Number,
                required: true
              },
              name: {
                type: String,
                required: true
              },
              status: {
                type: Number,
                required: true
              },
              coordinates: {
                latitude: {
                  type: Number,
                  required: true
                },
                longitude: {
                  type: Number,
                  required: true
                }
              },
              markers: [MarkerSchema]
            });

            citySchema.pre('save', function (cb) {
              if (this.markers && this.markers.length === 0) {
                console.log('no markers')
                this.markers = undefined;
              }
              cb();
            });

            citySchema.plugin(autoIncrement.plugin, {
                model: 'city',
                field: 'id',
                startAt: 1,
                incrementBy: 1
            });

            let City = module.exports = mongoose.model('city', citySchema);

схема маркера:

            let mongoose = require('mongoose');
            let autoIncrement = require('mongoose-auto-increment');

            let markerSchema = mongoose.Schema({
                 id: {
                    type: Number,
                    required: true,
                    unique: true,
                    sparse: true
                },
                status: {
                    type: Number,
                    required: true
                  },
                description: {
                  type: String,
                  required: true
                },
                coordinates: {
                    latitude: {
                      type: Number,
                      required: true
                    },
                    longitude: {
                      type: Number,
                      required: true
                    }
                }
            });

            markerSchema.plugin(autoIncrement.plugin, {
                model: 'marker',
                field: 'id',
                startAt: 1,
                incrementBy: 1
            });

            let Marker = module.exports = mongoose.model('marker', markerSchema);
...