Запрос не дает обновленный результат после обновления базы данных в mongoDB - PullRequest
0 голосов
/ 22 мая 2018

У меня есть настройка сервера в node.js, который использует mongoose.У меня проблема в том, что когда я обновляю базу данных следующим образом

Questions.update({id:questionID}, {$push: {answers: {answer:answer,answeredBy:username}}}, callback);

, я вижу, что данные были добавлены в MongoCompass, но когда я запрашиваю их, используя

Questions.find({tags:interests},callback);

, обновленные данныеданные не возвращаются.Но если я перезагружаю сервер и снова запрашиваю, я получаю обновленный результат.

И если я просто сохраняю данные и запрос, используя метод и запрос .save, база данных обновляется.

Так что проблема должна быть с моим .update методом, верно?Я действительно не могу найти, что я делаю неправильно

моя база данных выглядит следующим образом

let mongoose =new  require('mongoose');
const uuidv4 = require('uuid/v4');

//Define a schema
let Schema = mongoose.Schema;

let QuestionsSchema = new Schema({

    id: {
        type: String,
        unique: true
    },
    title: String,
    details: String,
    askedDate: {type: Date, default: Date.now},
    tags: [{

        type: String

    }],
    askedBy: String,
    answers: [{

        answeredBy: String,
        answer: String,
        answeredDate: {type: Date, default: Date.now}

    }]

});

let Questions = module.exports = mongoose.model('Questions', QuestionsSchema);

module.exports.addQuestion = function (newQuestion, callback) {
    //generating a new random id for each question
    newQuestion.id = uuidv4();
    newQuestion.save(callback);
};
module.exports.addAnswer = function (username,answer, questionID, callback) {
    Questions.update({id:questionID}, {$push: {answers: {answer:answer,answeredBy:username}}}, callback);
};

module.exports.getQuestions = function (interests, callback) {
Questions.find({tags:interests},callback);



};

Методы вызываются следующим образом

 Questions.getQuestions(user.tags[i], function (err, questions) {
            if (err) {
                let output = {
                    error: {
                        status: "fail",
                        name: err.name,
                        message: err.message,
                        text: err.toString()
                    }
                };
                let statusCode = err.status || 500;
                res.json(output);
                res.send();
            }
            else {
                questions.map((data) => {
                    if (!sentTags.includes(data.id)) {
                        jsonResponse.push(data);
                        sentTags.push(data.id);
                    }
                });

                if (i === user.tags.length - 1) {
                    res.send(JSON.parse(JSON.stringify(jsonResponse)));

                }
            }
        });

и

Questions.addAnswer(user.username,req.body.answer, req.body.id, function (err) {
            if (err) {
                let output = {
                    error: {
                        status: "fail",
                        name: err.name,
                        message: err.message,
                        text: err.toString()
                    }
                };
                let statusCode = err.status || 500;
                res.status(statusCode).json(output);
                res.send();
            }
            else {
                res.json({status: "success", message: "Answer Added"});
                res.send();
            }
        });

1 Ответ

0 голосов
/ 22 мая 2018

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

В Mongoose попробуйте указать отношение чтения к'primary' с этим:

Questions.find({tags:interests}).read('p').exec(callback)

Как указать проблемы чтения в Mongoose

MongoDB Документация о прочтении концерна

В зависимости от варианта использования вы также можете изучить проблемы с записью:

Проблемы записи MongoDB

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...