У меня возникла проблема, когда я пытаюсь обновить свой документ, но изменение не отражается. Я подозреваю, что 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 обрабатывает обновления, или я что-то делаю не так?
да, это показывает, что документ соответствует фильтру. модифицированныйсчетчик: 0, сопоставленныйсчетчик: 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 :)
О, И ВЫ ТАКЖЕ ОТВЕТИЛИ НА ВОПРОС, КОТОРЫЙ Я ДОЛЖЕН ПОЛУЧИТЬ, ХАХАХА, БОЛЬШОЕ СПАСИБО <3 Я бы проголосовал за вас, но у меня недостаточно представителей :(
Какой полный ответ из базы данных? В частности, он показывает, что документ соответствует фильтру?