Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs Mongo Giving';重复键错误';关于非唯一域_Angularjs_Node.js_Mongodb_Mongoose - Fatal编程技术网

Angularjs Mongo Giving';重复键错误';关于非唯一域

Angularjs Mongo Giving';重复键错误';关于非唯一域,angularjs,node.js,mongodb,mongoose,Angularjs,Node.js,Mongodb,Mongoose,我在尝试插入子文档时遇到MongoDB错误。子文档已经有唯一的_id,但正在为我不希望唯一的其他非唯一字段引发错误 Angular中的错误为:“Assets.serial已存在”如何使此字段包含重复的值,以及是什么导致模型认为它应该是唯一的? 这是我的猫鼬模型: 'use strict'; var mongoose = require('mongoose'), Schema = mongoose.Schema; var AssetUrlSchema = new Schema({ name:

我在尝试插入子文档时遇到MongoDB错误。子文档已经有唯一的_id,但正在为我不希望唯一的其他非唯一字段引发错误

Angular中的错误为:“Assets.serial已存在”如何使此字段包含重复的值,以及是什么导致模型认为它应该是唯一的?

这是我的猫鼬模型:

'use strict';

var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var AssetUrlSchema = new Schema({
  name: {
    type: String,
    unique: false,
    default: '',
    trim: true
  },
  url: {
    type: String,
    unique: false,
    default: 'http://placehold.it/75x75',
    trim: true
  },
}),

AssetSchema = new Schema({
  serial: {
    type: Number,
    unique: false
  },
  urls: {
    type: [AssetUrlSchema],
    unique: false,
    default: [
      { name: '', url: 'http://placehold.it/75x75' },
      { name: '', url: 'http://placehold.it/75x75' }
    ]
  }
}),

/**
 * Item Schema
 */
ItemSchema = new Schema({
    name: {
        type: String,
        default: '',
        required: 'Please enter name',
        trim: true
    },

  assets: {
    type: [AssetSchema],
    default: [],
    unique: false
  },

  property: {
    type: Schema.ObjectId,
    zd: 'Please select a property',
    ref: 'Property'
  },

    created: {
        type: Date,
        default: Date.now
    },

    user: {
        type: Schema.ObjectId,
        ref: 'User'
    }
});

mongoose.model('Item', ItemSchema);
下面是我的“保存”方法:

function(){
      var i = 0, assets = [];

      for (;i < 24;i++) {
        assets.push({
          serial: 1000+i,
          urls: {
            name: 'Asset Name ' + i,
            url: 'http://placehold.it/75x75?'
          }
        });
      }

      item = new Items ({
        name: 'FPO',
        property: newPropId,
        assets: assets
      });

      return item.$save(
        function(response){ return response; },
        function(errorResponse) {
          $scope.error = errorResponse.data.message;
        }
      );
    }

Mongoose不会删除现有索引,因此您需要显式删除该索引以将其删除。在外壳中:

> db.items.dropIndex('assets.serial_1')

如果您最初定义该字段
unique:true
,但随后从架构定义中删除该字段或将其更改为
unique:false
,则会发生这种情况。如果您使用的是MongoAtlas,则可以转到集合->单击要删除的索引上的“索引”->,单击“删除索引”

如果您处于开发/原型模式,只需删除实际集合(例如,在将unique:true更改为false之后),即可重置所有内容,mongoose将允许您进行复制。

谢谢,这很有帮助,但是什么让该字段成为索引呢?它永远不应该是唯一的。@BrandonFitzpatrick它一定是在过去某个时候作为唯一索引创建的。在您删除它并让Mongoose使用当前模式定义重新创建它之后,就不会发生这种情况了。不确定它是如何发生的,但删除索引会修复它。谢谢上帝保佑你,儿子!谢谢
> db.items.dropIndex('assets.serial_1')