Обновить вложенные значения в mongodb

Основываясь на приведенном ниже коде, я хочу установить переменную для req.body.update. Я не могу понять, как этого добиться. Когда я устанавливаю его на queryz, ничего не происходит.

Я использую для этого мангуста.

app.put('/application/todoupdate/:id/:index', function(req, res, next) {
    console.info('accessed put route');
    let item = 0;
    let queryz = "todos." + item + ".todoText";
    console.info(queryz);
    User.where({_id: req.params.id}).update({
      $set: {
        "todos.0.todoText": req.body.update
        // queryz: req.body.update
      }
    }).then(
      res.send(req.body.update)
    )
  });

Структура моей базы данных:

{
"_id": {
    "$oid": "77777777777"
},
"todos": [
    {
        "todoText": "req success",
        "timestamp": "7777777777777"
    },
    {
        "todoText": "something",
        "timestamp": "7777777777777"
    }
]
}

Я пришел к тому, что позволило мне получить доступ к нижнему уровню:

app.put('/application/todoupdate/:id/:timestamp', function(req, res, next) {
    console.info('accessed put route');
    User.where({_id: req.params.id, "todos.timestamp": 
req.params.timestamp}).update({
      $set: {
        "todos.$.todoText": req.body.update
      }
    }).then(
      res.send(req.body.update)
    )
  });
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
690
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для обновления вложенного массива объектов необходимо использовать оператор positional.

User.update(
    { _id: req.params.id }, 
    { "$set": { "todos.$.todoText": "hello" } }
)

и если вы хотите обновить все объекты в массиве, вы можете использовать $[] позиционный оператор

User.update(
    { _id: req.params.id }, 
    { "$set": { "todos.$[].todoText": "hello" } }
)

Итак, как мне поместить в это переменную? У меня нет проблем с конкретным указанием того, что я хочу обновить, но если я передаю индекс, как я сделал в параметрах, как мне разместить это как позицию.

Josh Bowden 13.06.2018 22:25

Ты получил меня как 90% пути, спасибо, чувак!

Josh Bowden 13.06.2018 22:45

Другие вопросы по теме