我有一个类似这样的架构:
class Schemas
constructor: ->
@mongoose = require 'mongoose'
@schema = @mongoose.Schema
@EmployeeSchema = new @schema
'firstname': { type: String, required: true },
'lastname': { type: String, required: true },
'email': { type: String, required: true, index: { unique: true }, validate: /\b[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}\b/ },
'departmentId': { type: @schema.ObjectId, required: true }
'enddate': String,
'active': { type: Boolean, default: true }
@EmployeeSchemaModel = @mongoose.model 'employees', @EmployeeSchema
@DepartmentSchema = new @schema
'name': { type: String, required: true, index: { unique: true } }
'employees' : [ @EmployeeSchema ]
@DepartmentSchemaModel = @mongoose.model 'departments', @DepartmentSchema
为了让我的员工住在一个部门的员工文档数组里,我有几个部门文档,其中存储了一些员工文档。然后我添加了一个新的部门,但它没有包含员工。如果我尝试再次添加没有员工的另一个部门,Mongoose会产生一个“重复键错误”,因为员工的电子邮件是必填的且唯一的。员工的电子邮件字段是必须的和唯一的,它需要这样。有没有什么办法解决这个问题?
ObjectId
使一个集合_refer_到另一个集合,但那样我就回到了关系模型。作为妥协,我想我可以在嵌入式员工对象中引用_email-address_集合并创建唯一索引。这似乎是这个模型的一个很好的解决方案。 - Simon Lomax