我试图让MongoDB根据其索引检测重复值.我认为这在MongoDB中是可能的,但是通过Mongoose包装器似乎已经破坏了.对于这样的事情:
User = new Schema ({
email: {type: String, index: {unique: true, dropDups: true}}
})
Run Code Online (Sandbox Code Playgroud)
我可以使用相同的电子邮件保存2个用户.该死.
这里也表达了同样的问题:https://github.com/LearnBoost/mongoose/issues/56,但那个线程已经老了,无处可去.
现在,我手动调用数据库来查找用户.由于"电子邮件"已编入索引,因此该电话费用并不昂贵.但让它本地处理仍然是件好事.
有人有解决方案吗?
我对 MongoDb / Mongoose 相当陌生,更习惯于 SQL Server 或 Oracle。
我有一个相当简单的事件架构。
EventSchema.add({
pkey: { type: String, unique: true },
device: { type: String, required: true },
name: { type: String, required: true },
owner: { type: String, required: true },
description: { type: String, required: true },
});
Run Code Online (Sandbox Code Playgroud)
我正在查看Mongoose Indexes,它显示了两种方法,我使用了字段定义。
我还有一个非常简单的 API,它接受 POST 并在此集合上调用 create 以插入记录。
我编写了一个测试,检查是否不应该插入具有相同 pkey 的记录,以及 unique:true 是否正在运行。我已经有一组我读入数组的事件,所以我只是再次发布这些事件中的第一个,看看会发生什么,我预计 mongo DB 会抛出 E11000 重复键错误,但这并没有发生。
var url = 'api/events';
var evt = JSON.parse(JSON.stringify(events[0]));
// POST'ed new record won't …Run Code Online (Sandbox Code Playgroud) 我试图在mongoose中为字段("event_key")创建一个唯一索引,如果我尝试创建重复条目,我希望mongodb不保存.我查看了文档,似乎我需要做的就是index: {unique: true}在模式中设置,但我似乎无法让它工作.我已经尝试了几种不同的排列,仍然无法使其发挥作用.
另外,required: true由于我可以保存条目,即使我没有传入event_key ,也似乎没有工作.我可能错过了一些非常愚蠢的东西,并想知道是否有人可以提供帮助?
架构
var WistiaAnalyticSchema = new Schema({
event_key: {type: String, required: true, index: {unique: true}},
visitor_key: String,
created: {type: Date, default: Date.now},
ip: String,
})
Run Code Online (Sandbox Code Playgroud)
试图添加到数据库
WistiaAnalytic.create({event_key: '1402230270487e0.2668362990953028'}, function(err) {});
WistiaAnalytic.create({event_key: '1402229819163e0.4385743956081569'}, function(err) {});
WistiaAnalytic.create({ip: '1402229819163e0.4385743956081569'}, function(err) {});
WistiaAnalytic.create({event_key: '1402229819163e0.4385743956081569'}, function(err) {
console.log(err)
});
Run Code Online (Sandbox Code Playgroud)