如何确保嵌入式文档集合的唯一性

时间:2012-01-11 04:34:25

标签: node.js mongodb mongoose

我有一个用户(文档),我在其中维护一组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 });

1 个答案:

答案 0 :(得分:0)

唯一索引意味着没有插入具有索引中指定的相同值的其他文档,这不适用于嵌入式文档。如果您尝试将foo@example.com添加到用户A和B,则由于唯一索引而失败。

您必须在Node.JS中强制执行此操作,而不是尝试使用唯一索引执行此操作。