0

我正在为错误 E11000 重复键错误集合而苦苦挣扎,我有一个带有另一个子模式数组的模式,当我尝试用空数组插入我的模式时,我总是得到这个错误。我试图在没有成功的情况下在预保存时将其设置为未定义...我已经从 mongoDB 及其索引中删除了我的方案。我在标记模式中插入 **autoincrement ** 后出现错误。

城市架构:

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

            var MarkerSchema = require('mongoose').model('marker').schema;

            //City Schema
            //status : 1 Ok, 2 Hidden, 3 Deleted


            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) {
              console.log('pre save');
              if (this.markers && this.markers.length === 0) {
              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({
                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);
4

3 回答 3

1

有同样的问题......相当肯定这是由 mongoose-auto-increment 模块引起的......

于 2019-05-31T11:57:01.663 回答
0

尝试这个:

let citySchema = new mongoose.Schema({
               id: {type: Number, default: 0, unique: true},
....

我认为错误是因为您没有定义自动增量应该起作用的初始值以及它没有被声明为唯一的事实?

于 2018-10-28T01:21:41.207 回答
0

我知道这是一个老问题,但对于未来的观众来说,这就是我所做的。

我在插件模式上添加了一种数字,并将 unique 设置为 false 以避免在操作过程中重复。

所以新的插件模式将是

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

citySchema.plugin(autoIncrement.plugin, {
     model: 'city',
     field: 'id',
     startAt: 1,
     incrementBy: 1,
     type: Number,
     unique: false
});
于 2020-06-10T23:37:49.457 回答