【问题标题】:Node.js Auto Increment E11000 duplicate key error collectionNode.js Auto Increment E11000 重复键错误收集
【发布时间】:2019-04-01 05:35:31
【问题描述】:

我正在为错误 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);

【问题讨论】:

    标签: node.js mongoose mongoose-schema mongoose-auto-increment


    【解决方案1】:

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

    我在插件架构上添加了一种数字类型,并将 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
    });
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        试试这个:

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

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

        【讨论】:

        • 谢谢你的帮助,我试过了,没有成功。错误出现在标记数组上,我也将这些属性添加到标记模式中,但没有成功。
        • 你说得对,我没看清楚,但现在更注意了,你想从1自动增加到1,从1开始?但默认情况下已经增加了 1,如果你只是删除“incrementBy:1”或者只是让它从 0 开始计数器,或者这会影响吗? markerSchema.plugin(autoIncrement.plugin, 'marker') --> 从 0 开始,1 中增加 1
        猜你喜欢
        • 2021-09-19
        • 2020-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-25
        • 2021-11-04
        • 1970-01-01
        • 2019-06-17
        相关资源
        最近更新 更多