[英]How to allow unique fields in subdocuments when using mongoose?
我正在使用 mongoose 來定義 2 個模式。
雇員.js
const mongoose = require("mongoose");
const uniqueValidator = require("mongoose-unique-validator");
const Role = require("./role");
const employeeSchema = mongoose.Schema({
code: { type: String, required: true, unique: true, index: true },
names: { type: String, required: true },
last_names: { type: String, required: true },
role: Role.schema,
dui: { type: String, required: true, unique: true, index: true },
nit: { type: String, required: false, unique: true, index: true },
sex: { type: String, required: false },
civil_status: { type: String, required: false },
birthday: { type: Date, required: false },
telephone: { type: String, required: true },
city: { type: String, required: true },
address: { type: String, required: true },
active: { type: Boolean, required: true },
});
employeeSchema.plugin(uniqueValidator);
module.exports = mongoose.model("Employee", employeeSchema);
和角色.js
const mongoose = require("mongoose");
const uniqueValidator = require("mongoose-unique-validator");
const roleSchema = mongoose.Schema({
code: { type: String, required: true, unique: true, index: true },
description: { type: String, required: true }
});
roleSchema.plugin(uniqueValidator);
module.exports = mongoose.model("Role", roleSchema);
我遇到的問題是,每當我插入帶有重復角色代碼的文檔時,由於唯一驗證,我都會收到錯誤消息。 我試過刪除
roleSchema.plugin(uniqueValidator);
來自 role.js,我也嘗試過使用 .set 來改變角色中的字段。
const mongoose = require("mongoose");
const uniqueValidator = require("mongoose-unique-validator");
const Role = require("./role");
const subRole = Role.schema.clone().set('code', {unique: false}).set('code', {index : false});
const employeeSchema = mongoose.Schema({
code: { type: String, required: true, unique: true, index: true },
names: { type: String, required: true },
last_names: { type: String, required: true },
role: subRole,
dui: { type: String, required: true, unique: true, index: true },
nit: { type: String, required: false, unique: true, index: true },
sex: { type: String, required: false },
civil_status: { type: String, required: false },
birthday: { type: Date, required: false },
telephone: { type: String, required: true },
city: { type: String, required: true },
address: { type: String, required: true },
active: { type: Boolean, required: true },
});
employeeSchema.plugin(uniqueValidator);
module.exports = mongoose.model("Employee", employeeSchema);
我總是收到一條錯誤消息,指出角色代碼必須是唯一的。 我使用.set 不正確嗎? 或者我錯過了什么? 非常感謝你提前。
解決它改變:
const subRole = Role.schema.clone().set('code', {unique: false}).set('code', `{index : false});`
到
const subRole = Role.schema.clone().set('excludeIndexes', true);
刪除了員工的集合,以便使用正確的索引重新創建它,這樣就成功了。
在 github 的貓鼬問題之一中提到了它: https://github.com/Automattic/mongoose/issues/11547
據說他們實施了一些關於它的東西,但我沒有得到它。 以上雖然對我有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.