MongoDB nodejs updateOne всегда возвращает модифицированный счетчик: 0

У меня возникла проблема, когда я пытаюсь обновить свой документ, но изменение не отражается. Я подозреваю, что MongoDB обнаруживает, что мое значение каким-то образом остается прежним, хотя я его изменил.

const User = require('./assets/models/User.js');
var message = user.messages;

//should be an empty array for right now, can be something like 
//['erin': [{ from: ‘erin’, to: ‘erin’, content: ‘test’ }]]
//in the future

if (!message[otherPerson]) message[otherPerson] = [];
await message[otherPerson].push(msg);
//where msg is a msg object
//pushes message into new index

//updates messages with new data
const test = await User.updateOne({ usertag: person }, {
$set: { messages: message }
});
console.info(await test);

Я пробовал несколько форматов обновления, таких как

User.updateOne({ usertag: person }, {
messages
});

где переменная messages называется message в предыдущем примере или

User.updateOne({ usertag: person }, {
$set: { messages }
});

и ничего не работает Я также упомяну, что это довольно старый код, который работал довольно хорошо. Что-то изменилось в том, как MongoDB обрабатывает обновления, или я что-то делаю не так?

Какой полный ответ из базы данных? В частности, он показывает, что документ соответствует фильтру?

user20042973 07.10.2022 00:03

да, это показывает, что документ соответствует фильтру. модифицированныйсчетчик: 0, сопоставленныйсчетчик: 1.

ErinNyx 10.10.2022 00:25
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Если вы хотите добавить новое значение в массив messages, вы должны использовать $push:

const test = await User.updateOne({ usertag: person }, {
    $push: { messages: msg }
});

Если вы хотите отредактировать определенный message, вы должны отфильтровать его по идентификатору и указать конкретный элемент массива (я предполагаю, что _id является вашим идентификатором для message элементов):

const test = await User.updateOne({ usertag: person, messages._id: msg._id }, {
    $set: { 
        messages.$.from: msg.from,
        messages.$.to: msg.to,
        messages.$.content: msg.content,
    }
});

Кроме того, вы не должны await результат test, поскольку вы уже разрешили Promise, ожидая updateOne:

console.info(test);

Это не совсем так, как я это сделал, но это привело меня к правильному ответу! Спасибо! Я сейчас использую $push :)

ErinNyx 10.10.2022 00:24

О, И ВЫ ТАКЖЕ ОТВЕТИЛИ НА ВОПРОС, КОТОРЫЙ Я ДОЛЖЕН ПОЛУЧИТЬ, ХАХАХА, БОЛЬШОЕ СПАСИБО <3 Я бы проголосовал за вас, но у меня недостаточно представителей :(

ErinNyx 10.10.2022 00:27

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