Как добавить объект во вложенный массив в мангусте? - PullRequest
0 голосов
/ 26 сентября 2018

По сути, я пытаюсь сделать что-то вроде FindByIdAndCreate, метода, которого нет в мангусте.

У меня есть такая схема:

const WordSchema = new Schema ({
    TargetWord: String,
    Translation: String, 
    ExampleSentences: [{            
        Number: Number, //increment somehow each time 
        Sentence: String, 
    }],
});

У меня есть форма, в которой пользователь может добавить примеры предложений этого целевого слова, маршрут для которого выглядит следующим образом:

router.put("/word/:id/add", async(req, res) => {
    //get the new sentence from the field 
        var NewSentence = req.body.Sentence;

Теперь, когда я сохраню это новое предложение в переменной NewSentence, я хочу создать новый объект в массиве WordSchema.ExampleSentences, который будет содержать новые предложения и число, которое должно автоматически увеличиваться.

Я возился с FindByIdAndUpdate безрезультатно, этот синтаксис не работает, потому что он выдает ошибку при использовании .

WordSchema.findByIdAndUpdate(req.params.id, {ExampleSentences.Sentence: NewSentence}, ...

1 Ответ

0 голосов
/ 26 сентября 2018

Единственное решение для увеличения вашего счетчика - это извлечь каждый документ со старым добрым «find» и соответственно создать новую запись, так как «update» не может самостоятельно ссылаться на документ во время процесса.

router.put("/word/:id/add", async(req, res) => {
    WordSchema.find({_id: req.body.id}, function(results) {
        if (results.length === 0) return res.json();

        const word = result[0];

        const NewExampleSentence = {
            Number: word.ExampleSentences.length, // if your counter start from 1, then add 1 
            Sentence: req.body.Sentence
        };

        word.ExampleSentences.push(NewExampleSentence);
        word.save(function(err) {
            if (err) {
                // handle error
            }
            return res.json();
        })
    }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...