首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在猫鼬中对嵌套对象使用“唯一”

在猫鼬中对嵌套对象使用“唯一”
EN

Stack Overflow用户
提问于 2013-04-02 21:02:13
回答 2查看 2.5K关注 0票数 0

因此,我有一个具有嵌套配置文件属性的用户模式,并且希望确保当配置文件属性存在时,所有配置文件id都是唯一的:

代码语言:javascript
运行
复制
UserSchema = new Schema {
    ...
    ...
    profile : {
        id : {
           type : String
           unique : true
           sparse : true
        }
        ...
        ...
    }
}

但是,在运行测试时,我可以使用相同的profile.id值保存两个不同的用户。是否在嵌套文档上不强制使用唯一属性?我是不是遗漏了什么?

打开日志之后,我可以看到这样的输出(我移除了大部分字段):

代码语言:javascript
运行
复制
Mongoose: users.ensureIndex({ email: 1 }) { safe: undefined, background: true, unique: true }  
Mongoose: users.insert({ profile: { id: '31056' }) {}  
Mongoose: users.ensureIndex({ 'profile.id': 1 }) { safe: undefined, background: true, sparse: true, unique: true }  
Mongoose: users.insert({ profile: { id: '31056' }) {}

重复的值仍在插入中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-05 03:25:35

Aaron的建议修正了创建异步索引所导致的争用条件。我等待执行用户架构的单元测试,直到发出索引事件:

代码语言:javascript
运行
复制
User.on('index', function (err) { ... })
票数 0
EN

Stack Overflow用户

发布于 2013-04-02 21:12:30

也许它只在嵌套属性中验证为唯一。我自己从来不相信unique,总是进行手动验证,这样我就可以有更多的控制:

我从未在“猫鼬”中使用过嵌套文档,也不确定它是否有效,但至少让您有一个想法:

代码语言:javascript
运行
复制
User.schema.path('profile.id').validate(function(value, respond) {  
  mongoose.models["User"].findOne({ profile.id: value }, function(err, exists) {
    respond(!!exists);
  });
}, 'Profile ID already exists');
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15774314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档