Мангуст уникальный не работает в подпункте в объекте, даже если я использую addToSet - PullRequest
0 голосов
/ 19 февраля 2019

я пытаюсь заставить мою схему работать, но: (

Schema({
  name: String
  text: [
    {
      name: String,
      language: {
        type: String,
        required: true,
        unique: true
      }
    }
  ]
})

что мне делать, если я хочу, чтобы они не могли добавить 2 текста на одном языке ??

let texte = [
    { name: "first", language: "English" },
    { name: "duplicate", language: "English" }
  ];
  newData.text.addToSet(texte[0]);
  newData.text.addToSet(texte[1]);
  newData.text.addToSet(texte[1]);

, если я нажимаюдублированный текст на том же языке я не получаю ошибку

    {
  "_id": "5c6aff3e6c895637094427d7",
  "text": [
    {
      "_id": "5c6aff3e6c895637094427d8",
      "name": "first",
      "language": "English"
    },
    {
      "_id": "5c6aff3e6c895637094427d9",
      "name": "duplicate",
      "language": "English"
    },
    {
      "_id": "5c6aff3e6c895637094427da",
      "name": "duplicate",
      "language": "English"
    },
  ],
  "name": "test"
}

я надеюсь, что есть способ для этого: (

1 Ответ

0 голосов
/ 20 февраля 2019

Установка уникального значения в true не проверяет дубликаты данных в базе данных перед созданием или обновлением.Вы должны проверить это самостоятельно, прежде чем создавать или обновлять документы.Установка уникального значения в true добавляет уникальный индекс для этого поля в mongodb.Его использование не то, что вы думаете.

Что вы можете сделать, это сначала выполнить запрос, чтобы проверить, существует ли уже документ с полем, которое вы хотите быть уникальным.

Colection.find({ "text.name": "duplicate", "text.language": "English" })
 .then(doc => {
   if(doc) {
     // handle duplicate case

   } else {
    // create new

   }
 })

Или еслиесли вы хотите проверить данные перед их сохранением в базе данных, вы можете использовать библиотеку проверки, например JOI .Это будет обрабатывать большинство ваших случаев использования для обработки проверки схемы.

...