Невозможно обновить вложенный массив логического значения

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

Но я получаю ответ, что «запись обновлена», но я не вижу изменений в коллекции MongoDB.

Это моя функция, которую я запускаю

exports = async function({ body }) {
  const data = JSON.parse(body.text());
  const ACAS_Mission = data.ACAS_Mission;
  const terminal = data.terminals[0].terminal;
  const router = data.terminals[0].XLESS.router;

  const comstat = context.services
    .get("mongodb-atlas")
    .db("Comstat")
    .collection("comstat");

  // Find the document
  const filter = { ACAS_Mission, "terminals.terminal": terminal };
  const document = await comstat.findOne(filter);
  console.info("Document:", JSON.stringify(document));

  // Update the document
  const updateFilter = { ACAS_Mission, "terminals.terminal": terminal };
  const update = { $set: { "terminals.$[t].XLESS.router": router } };
  const options = { arrayFilters: [{ "t.terminal": terminal }] };
  const result = await comstat.updateOne(updateFilter, update, options);
  console.info("Update result:", JSON.stringify(result));

  return { message: "Record updated." };
};

и это документ, который я пытаюсь обновить

Документ MongoDB

Тело JSON, которое я передаю, когда делаю PUT

{
  "ACAS_Mission": "xx53583",
  "terminals": [
    {
      "terminal": "SNN573330",
      "XLESS": {
        "router": true
      }
    }
  ]
}

Ты всегда возвращаешься {message: "Record updated"}. Просто чтобы убедиться, вы действительно просматриваете вывод консоли, а не сообщение?

Jakob Schödl 19.02.2023 17:27

Результат обновления: {"matchedCount":0,"modifiedCount":0} Итак, в моих журналах я показываю, что он хочет выполнить функцию PUT, но все соответствует моему текущему документу.

Tim Carrender 19.02.2023 17:51
Поведение ключевого слова "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
2
73
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Как вы написали в своем комментарии, MongoDB обрабатывает запрос, но изменений нет. Это означает, что ничто в вашей базе данных не соответствует вашему запросу (как можно сделать вывод из того, что matchedCount равно 0).

Проверьте свой запрос: на скриншоте видно, что terminals содержит массив, содержащий другой массив, содержащий объект. Вы ищете массив, непосредственно содержащий объект, поэтому добавление скобок вокруг оператора может сработать.

Удалось изменить тело JSON и несколько исправлений функций, и это работает!

{
  "ACAS_Mission": "xx53583",
  "terminals": [
    [
      {
        "terminal": "SNN573330",
        "NodeID": 251,
        "XLESS": {
          "router": false
        }
      }
    ]
  ]

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