我有一个用户(文档),我在其中维护一组Friends(嵌入式文档)。我一直在努力确保对于给定的用户,其所有朋友都是唯一的(电子邮件必须是唯一的)。然而,这种约束并不强制执行,我无法理解为什么。有人可以帮我解决这个问题吗?
我正在使用Mongo 2.2和Mongoose。
var FriendSchema = new mongoose.Schema({
email : { type: String, required: true, lowercase: true, trim: true }
, name : { type: String, trim: true }
});
var UserSchema = new mongoose.Schema({
email : { type: String, required: true, index: { unique: true }, lowercase: true, trim: true }
, friends : [FriendSchema]
});
UserSchema.index({ 'friend.email': 1 }, { unique: true });
答案 0 :(得分:0)
唯一索引意味着没有插入具有索引中指定的相同值的其他文档,这不适用于嵌入式文档。如果您尝试将foo@example.com添加到用户A和B,则由于唯一索引而失败。
您必须在Node.JS中强制执行此操作,而不是尝试使用唯一索引执行此操作。