Я пытаюсь построить взаимосвязь между modules collection
и languages collection
.
Модули представляют собой один конкретный c учебный ресурс. Скажем, абзац из книги состоит из 30 слов. Если мне нужно создать модуль на основе этого абзаца, тогда я хочу, чтобы в моем модуле был вложенный документ из этих 30 слов.
Языки представляют, ну язык. Моя текущая мысль состоит в том, чтобы иметь document
в моем languages collection
для каждой языковой категории (французский, английский sh, немецкий и т. Д.), И в каждом из этих документов есть вложенный документ всех ~ 4000 слов, которые в настоящее время существуют в этом язык в базе.
Итак, вот моя попытка объяснить проблему:
- Я вошел в систему как администратор на моем сайте. Есть параграф французских слов, который я хочу сохранить в
Modules Collection
моей базы данных. Мы назовем этот документ «Урок французского 1». - Я не хочу создавать новые слова из воздуха и передавать их в мой новый документ модуля «Урок французского 1».
- Я хочу найти слов, которые уже существуют в моем
French document
в моем Languages collection
. - Если слово существует, отлично. Если нет, то его нужно создать в
French document
. - Как только слово будет найдено в
French document
в моем Languages collection
, я хочу, чтобы мой модуль "Урок французского Поддокумент слова размером 1 дюйм, указывающий на это слово, производное от моего French document
.
Схема модуля
const ModuleSchema = new mongoose.Schema({
title: {
type: String,
required: true,
},
media: {
type: String,
enum: ['Advertisement', 'Traditional', 'Other'],
required: true,
},
difficulty: {
type: String,
enum: ['Beginner', 'Intermediate', 'Advanced'],
required: true,
},
producer: {
type: ObjectId,
ref: 'producers',
required: true,
},
summary: {
type: String,
default: 'No summary provided.',
minlength: 20,
maxlength: 250,
},
language: {
type: ObjectId,
ref: 'languages',
required: true,
},
topics: [
{
type: ObjectId,
ref: 'topics',
required: true,
},
],
words: [
{
wordId: {
type: ObjectId,
ref: 'languages.words',
required: true,
},
word: {
type: String,
required: true,
},
},
],
});
Языковая схема
const LanguageSchema = new mongoose.Schema({
language: {
type: String,
enum: ['French', 'English', 'Spanish', 'German'],
required: true,
},
origin: {
type: String,
enum: ['Latin', 'Asiatic', 'Germanic', 'Other'],
required: true,
},
words: [
{
word: String,
partOfSpeech: {
type: String,
enum: ['noun', 'verb', 'adverb', 'adjective'],
required: true,
},
audio: String,
kinId: [
{
languageId: ObjectId,
wordId: ObjectId,
},
],
},
],
});
При условии, что эта схема и настройка вложенного документа имеют смысл. Как я могу go создать и обновить схему модуля для поиска, а затем ссылаться на связанные слова в документе на правильном языке? Может ли это облегчить mon goose или для этого потребуется более сложная JS смазка для локтей?
На данный момент я придумываю такое решение: когда я начинаю создавать это модуля, я записываю слова, разбиваю их на массив, а затем перебираю каждое слово в массиве, а затем ищу эту работу в соответствующей языковой коллекции (это означает, что мне нужно заранее получить доступ к идентификатору коллекции). Если он существует, я добавляю его идентификатор (или, возможно, все его данные) в только что созданный модуль. Я не знаю, хорошая ли это идея, поскольку, если мы будем использовать приведенный выше пример, потребовалось бы 30 различных операций чтения (каждое слово в массиве), чтобы найти слово в связанном language document
, а затем 30 записей во вложенный документ модуля, чтобы добавить эти слова в модуль.
Еще одно соображение заключается в том, что если я удалю или изменю слово, его придется (как я понимаю вручную) обновлять по всей базе данных. Может быть волосатым.
бонус: Какого черта вы называете словом, имеющим такое же значение на другом языке? Красный, гниль, румяна, роя? Я все время нахожу родственные в гугле ...