尝试插入子文档时出现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;
}
);
}
第一次插入文档时,它工作正常。任何后续时间,它都会失败并显示400,因为assets.serial字段不是唯一的。但是,我专门将该字段标记为unique:false。
模式控制台中的错误是:
{ [MongoError: insertDocument :: caused by :: 11000 E11000 duplicate key error index: mean-dev.items.$assets.serial_1 dup key: { : 1000 }]
name: 'MongoError',
code: 11000,
err: 'insertDocument :: caused by :: 11000 E11000 duplicate key error index: mean-dev.items.$assets.serial_1 dup key: { : 1000 }' }
POST /api/items 400 14.347 ms - 41
猫鼬不会删除现有索引,因此您需要显式删除该索引以摆脱它。在外壳中:
> db.items.dropIndex('assets.serial_1')
如果您最初定义该字段,unique: true
但随后又将其从模式定义中删除或将其更改为,则会发生这种情况unique: false
。
编辑2019:此问题是在2016年11月,当前方法和以前方法的接受答案如下。 我有一个<code>数据。表约有250万行的表。有两列。我想删除两列中重复的任何行。之前的数据。帧我会这样做:<code>df- 有什么建议吗? 干杯,戴维 例 在上面的data.table中,其中< code>V2是表键,只有第4、7和10行将被删除。
我试图在我们的COSMOSDB上的一些集合上创建一个唯一的索引。每个MS文档https://docs.microsoft.com/en-us/azure/cosmos-db/mongoDB-indexing:只有当集合为空(不包含任何文档)时,才能创建唯一索引。 因此,我清理了集合上的所有数据,但遇到错误时,消息是: 你知道为什么我会出错吗? 谢谢,
我试图创建一个表来存储DynamoDB中的发票行项目。假设该项由、和、amount和其他行项详细信息定义。 唯一项由前3个属性的组合定义。对于不同的项目,这些属性中的任何2个都可以是相同的。我应该选择什么作为哈希属性和范围属性?
问题内容: 不知道在PostgreSQL 9.3+中是否可行,但是我想在非唯一列上创建唯一索引。对于像这样的表: 我想仅能[快速]查询不同的日子。我知道我可以用来帮助执行不同的搜索,但是如果不同值的数量大大少于索引覆盖的行数,这似乎会增加额外的开销。就我而言,大约30天中有1天与众不同。 我是创建关系表以仅跟踪唯一条目的唯一选择吗?思维: 并在每次插入数据时使用触发器来更新它。 问题答案: 索引只
我有这样的桌子: 我试图插入一些查询到另一个表(device_usage_test1)。这是我的表: 这是我的插入命令: 稍后,我将在device_usage_test1上创建一个插入查询。所以我的设备序列必须是唯一的。但是当我尝试用deviceserial (unique)插入时。它显示错误:< code >错误:重复的键值违反了唯一约束“device _ usage _ device seri
我的应用程序使用Spring Boot/JPA/MongoDB。 我使用以下方法将域类映射到MongoDB 但找不到如何使我的DBRef字段唯一。