Создание / обновление объектов с помощью mongoose / mongoDB

1

В Интернете полно ресурсов для работы с массивами, но зачастую объекты более естественны для данных и, по-видимому, более эффективны.

Я хочу хранить объекты с ключом в именах динамических полей следующим образом:

project['en-US'] = { 'nav-back': 'Go back', ... }
project['pt-BR'] = { 'nav-back': 'Volte', ... }

Похоже, что это будет более эффективно, чем сохранение массива всех языков и его фильтрация, чтобы получить все языковые записи для данного языка.

Мой вопрос: как я могу вставить пару ключ-значение в объект с динамическим именем, используя mongoose? И должен ли объект существовать или я могу его создать, если он не в одной операции?

Я попробовал это:

await Project.update(
{ _id: projectId },
{
  $set: {
    ['${language}.${key}']: value,
  },
});

Но не удачи, независимо от того, есть ли у меня пустой объект для начала или нет: { ok: 0, n: 0, nModified: 0 }.

Бонус: Должен ли я индексировать эти объекты и как? (Я хочу обновить отдельные элементы)

Спасибо!

Теги:
object
mongoose

2 ответа

0
Лучший ответ

Я решил это, используя исходный фрагмент кода без изменений, но добавив { strict: false } к схеме:

const projectSchema = new Schema({ ...schema... }, { strict: false });
1

В mongoose schema - это все. Он описывает данные, которые вы собираетесь читать/хранить из базы данных. Если вы хотите добавить динамически новый ключ в схеме, это будет сложно.


В этом конкретном случае я бы рекомендовал использовать собственный mongodb-native-driver который является более разрешительным в отношении манипулирования данными. Таким образом, вы можете читать данные в определенном формате и динамически добавлять в него свое поле.



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

  • Использовать mongodb-native-driver для вставки нового ключа в данные базы данных
  • Измените схему мангуста, которую вы имеете в коде (вставьте в нее новый ключ)
  • Используйте мангуст для последующего управления данными

Не забывайте динамически обновлять свою mongoose model или вы не будете читать новый ключ при следующей find.

  • 1
    Спасибо, я думал о том, чтобы бросить мангуста, возможно, я сделаю это или посмотрю на динамическое обновление схемы (не знал, что ты мог!). Буду обновлять это, когда я попробую это

Ещё вопросы

Сообщество Overcoder
Наверх
Меню