我有以下数据库:
{
"_id" : ObjectId("556da79a77f9f7465943ff93"),
"guid" : "a12345",
"update_day" : "12:05:10 02.06.15"
}
{
"_id" : ObjectId("556dc4509a0a6a002f97e972"),
"guid" : "bbbb",
"update_day" : "15:03:10 02.06.15"
"__v" : 0
}
{
"_id" : ObjectId("556dc470e57836242f5519eb"),
"guid" : "bbbb",
"update_day" : "15:03:10 02.06.15"
"__v" : 0
}
{
"_id" : ObjectId("556dc47c7e882d3c2fe9e0fd"),
"guid" : "bbbb",
"update_day" : "15:03:10 02.06.15"
"__v" : 0
}
我想将guid设置为唯一,因此不能复制(就像MYSQL中的主键一样)。所以DB看起来像这样:
{
"_id" : ObjectId("556da79a77f9f7465943ff93"),
"guid" : "a12345",
"update_day" : "12:05:10 02.06.15"
}
{
"_id" : ObjectId("556dc4509a0a6a002f97e972"),
"guid" : "bbbb",
"update_day" : "15:03:10 02.06.15"
"__v" : 0
}
当我要插入另一个" guid":" bbbb" (使用save命令),它将失败。
答案 0 :(得分:3)
在mongoose中声明架构时,请执行此操作
guid : { type : String, unique : true}
如果你想让mongodb自己创建guid
(比如_id
),那么就这样做
guid : { type : String, index : { unique : true} }
答案 1 :(得分:1)
首先,您必须处理MongoDB集合的当前状态并删除所有重复的文档。
有一件事是肯定的:您将无法在集合中创建包含重复项的唯一索引,dropDupes
现在因version 2.7.5而被弃用,因此您无法使用它。顺便说一下,它被删除了,因为几乎不可能预测在这个过程中会删除哪个文件。
两种可能的解决方案:
创建一个新集合。在此新集合上创建唯一索引并运行批处理以将旧集合中的所有文档复制到新集合,并确保在此过程中忽略duplicated key error
。
手动在自己的收藏中处理它:
我会在mongoose中声明我的guid:
guid : { type : String, unique : true}
答案 2 :(得分:-1)
您可以按照此处的说明操作: create unique index。这正是你所需要的。