Node.js mongoose在子文档属性上强制唯一属性

Node.js mongoose在子文档属性上强制唯一属性,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我不知道为什么在这种情况下不验证unique属性 var UserSchema = new mongoose.Schema({ name: { type: String}, email: { type: String, unique: true, required: true }, }); var CustomerSchema = new mongoose.Schema({ name: { type: String, unique: true, required: true },

我不知道为什么在这种情况下不验证unique属性

var UserSchema = new mongoose.Schema({
  name: { type: String},
  email: { type: String, unique: true, required: true },
});

var CustomerSchema = new mongoose.Schema({
   name: { type: String, unique: true, required: true },
   users:[UserSchema],
});
当我将一个新用户推送到customer users数组中时,我可以添加具有相同电子邮件属性的同一用户,而不会引发预期的重复错误

如果未提供属性值,但未提供唯一属性,则必需属性将引发错误

这是预期的行为吗

例如:

var customer = new Customer();
customer.name = 'customer_name';
customer.save(...);

for(var i = 0; i < 10; i++){
   var user = new User();
   user.email = 'mg@google.com';
   customer.users.push(user);
   customer.save(...);
}
报告解释说:

唯一约束适用于集合中的单独文档。也就是说,唯一索引防止单独的文档对索引键具有相同的值,但索引不阻止文档具有多个元素或索引数组中嵌入的文档具有相同的值

由于您处理的是嵌入文档,因此无法在同一父文档的嵌入文档数组中的属性上强制唯一性

但是,当您随后尝试插入一个新客户时,该客户的用户也具有mg@google.com作为电子邮件地址,只有在保存时才会出现错误,而在使用.push时则不会,因为唯一性是由MongoDB而不是Mongoose强制执行的