簡體   English   中英

使用 mongoose 時如何在子文檔中允許唯一字段?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM