У меня есть настройка сервера в 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();
}
});