【问题标题】:How to ensure uniqueness in a collection of embedded document如何确保嵌入文档集合的唯一性
【发布时间】:2012-01-11 13:21:28
【问题描述】:

我有一个用户(文档),我在其中维护一组朋友(嵌入文档)。我一直在努力确保对于给定的用户,它的所有朋友都是唯一的(电子邮件必须是唯一的)。但是,该约束并未强制执行,我不明白为什么。有人可以帮我吗?

我正在使用 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 });

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

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

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

    【讨论】:

    • 我也遇到了这个问题。让 Node.js 处理这个安全吗?在异步保存调用期间不会发生欺骗吗?
    • 是的,但实际上没有其他选择。你可以做两步保存来尝试减少机会。但归根结底,如果数据库不执行它,你就会遇到这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    相关资源
    最近更新 更多