У меня проблемы с обновлением поля mixed type
в схеме mon goose. Это не лучшая настройка схемы, но у меня есть причины для ее настройки. Теперь я хочу выполнить javascript array-like
таких операций, как push
. Я хочу получить доступ к индексу текущего do c, повторяемого во вложенных массивах, в поле tags
. Примерно так:
Пн goose схема
let user = {
name : String,
email : String,
tags : []
}
Поле tags
создается динамически при создании пользователя, и в результате я получил что-то подобное после вставки пользователя в базу данных
tags : [
[{obj1}, {obj2}, {obj3}, ...],
[...],
[...],
[...],
[...]
]
Чего я хочу достичь - pu sh новый документ для вложенного массива "javascript way"
user.tags[0].forEach(obj, index){
// Do some operations here with obj and index
// I don't know how to update a nested array with the mongo $push operator that is why I am falling back to the `js array push` method
let newObj = { foo: bar }
user.tags[0].push(newObj)
user.save()
}
После тестирования с почтальоном, он показывает, что операция прошла успешно и возвращает вставленный элемент, но я наблюдаю две проблемы:
- Он не постоянен в БД, но в то же время мой ответ на почтальон выглядит так:
{
name : bar,
email : foo,
tags : [
[{ foo : bar}], // from the last push operation I did
[],
[],
[]...
...
]
}
Последующие
push
операции с любым индексом массива (например, 0-м индексом) заменяют текущий объект вместо его добавления:
user.tags[0].push(obj)
===> это заменяет первый объект (в ответе почтальона, конечно, а не в БД, потому что это кажется, не является постоянным)
Любая помощь в достижении этого будет высоко оценена
Я просто изучаю эти вещи, любой лучший подход для решения той же проблемы очень приветствуется, благодарю вас. :)