Можно ли обновить документ в функции обратного вызова после сохранения нового документа в другой коллекции? - PullRequest
1 голос
/ 09 июля 2019

Я сохраняю документ newPost, в коллекцию публикаций и в функции then (), я хотел бы обновить другие документы, но в коллекции тегов. Однако, по некоторым причинам, это изменение в коллекции тегов не происходит, и res.json (post) не возвращает новое сообщение, как должно.

Я использую почтальон для отправки запросов на сервер.

Когда я вынимаю фрагмент кода, в котором я делаю изменения в коллекции тегов, res.json (запись) работает, и созданная запись возвращается в формате json в Postman, однако, когда ее помещают обратно, кажется, что ничего не работает. Однако сообщение помещается в базу данных и доступно для просмотра в коллекции.

const newPost = new Post({
    authorId: user._id,
    text: req.body.text,
    title: req.body.title,
    tags: req.body.tags.split(", ")
});

newPost.save()
.then(post => {
// here, I'd like to do the following commented section or something
//similar:
// Tag.findAndModify({
//     query: {name: {$all: [post.tags]}},
//     update: {
//         $push: {posts: post._id},
//         $set: {lastActive: new Date()}
//     }
// });
 res.json({post});
}).catch(err=>res.json(err));

без комментируемого раздела, сообщение успешно добавлено в базу данных, res.json (post) возвращает сообщение в Postman; с некомментированным разделом сообщение успешно добавлено в базу данных, но изменение коллекции тегов не происходит, а res.json (post) в почтальоне пусто

1 Ответ

1 голос
/ 09 июля 2019

вам нужно вернуть res.json после сохранения, так как это асинхронная операция.

    const newPost = new Post({
        authorId: user._id,
        text: req.body.text,
        title: req.body.title,
        tags: req.body.tags.split(", ")
    });

    newPost.save()
    .then(post => {
    // here, I'd like to do the following commented section or something
    //similar:
     Tag.findAndModify({
         query: {name: {$all: [post.tags]}},
         update: {
             $push: {posts: post._id},
             $set: {lastActive: new Date()}
         }
     }).exec((err,tags)=>{
        if(err) //return error
        res.json({post,tags});
     });

    }).catch(err=>res.json(err));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...