Вставить объект в массив в mongodb nodejs

Это моя коллекция mongodb.

Я хочу поместить объект в массив с помощью findOneAndUpdate().

Это мой код nodejs.

url = req.params.posturl
         filter = { url: url }
         update = { comments: (result.like + 1) }
         // maybe you can try save/get this to/in .json
         Blog.findOneAndUpdate(filter, update)
            .then((result) => {
               res.json({ status: 1 })
            })
            .catch((error) => {
               console.info(error);
            })

Как я могу это сделать?

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

turivishal 20.12.2020 14:06
Поведение ключевого слова "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) для оценки ваших знаний,...
0
1
586
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Попробуй это:

         url = req.params.posturl
         filter = { url: url }
         Blog.findOne(filter)
            .then((result) => {
               result.like ++;
               return result.save();
            })
            .then(result => {
               res.json({status: 1});
             })
            .catch((error) => {
               console.info(error);
            })

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

Я имею в виду комментарии на ютубе. Пользователь входит в систему и комментирует сообщение в блоге.

Abdi Kaan 20.12.2020 14:14

Итак, комментарий — это вложенный объект внутри поста в блоге, а внутри комментария вам нравится?

Hadi Ahmadi 20.12.2020 14:19

Используйте returnOriginal:false драйвера Node.js в качестве третьего аргумента для вашего вызова БД. Измените строку на:

filter = { url: url }
update = { comments: (result.like + 1) }
return = { returnOriginal: false }
Blog.findOneAndUpdate(filter, update, return)

Некоторые люди используют Mongoose, чтобы избежать таких сложностей. Документация по Node.js великолепна, но не очень удобочитаема.

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

Вы можете использовать оператор $push для обновления массива. На самом деле у вас есть несколько способов обновить документ, например оператор $set, или найти его и изменить документ, а затем сохранить новый документ, это будет обновление вашего документа. Код TLDR здесь;

const url = req.params.posturl
const newComment = req.body.comment
const filter = { url }
const willBePush = { comments: newComment }
Blog.findOneAndUpdate(filter, { $push: willBePush })
  .then((result) => {
    /** Do whatever with response if you want to see new document you can pass { new: true } as option for findOneAndUpdate method*/
    console.info(result)    
  })
  .catch((error) => {
    console.info(error);
  })

Использованная литература:

$пуш

$ сет

документы мангуста

Добро пожаловать @AbdiKaan

isik_hi 21.12.2020 20:37

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