Я использую Mongoose/MongoDB, и я пытаюсь связать многие комментарии к одной статье. Мое приложение начинается с соскабливания с веб-сайта, а затем у пользователя есть возможность сохранить каждую статью, которая была очищена в MongoDB. Когда пользователь решает сохранить одну статью, я сохраняю ее в базе данных. Поэтому, когда пользователь нажимает на одну из сохраненных статей, они могут прокомментировать их. Каждая статья имеет свой собственный раздел комментариев. Мне нужно получить правильные комментарии.Необходимо сделать много комментариев, относящихся к одной статье отношения MongoDB
// Мой запрос комментарий запись в JS файл
function postComment(){
var articleComment = {
comment: $('#comment').val().trim()
}
$.post('/comments/' + articleID, articleComment).done(function(data){
$('.main-popup').fadeOut();
console.log('DONNE', data);
});
}
// маршрут сообщение в контроллер
router.post('/comments/:id', function(req, res){
var newComment = new Comment(req.body);
newComment.save(function(err, doc){
if(err){
console.log(err);
}else{
Comment.findOneAndUpdate({ "_id": doc._id }, { "article": req.params.id }).exec(function(err, doc){
if(err){
console.log(err);
res.send(err);
}else{
res.send(doc);
}
});
}
});
});
// Получаем запрос, чтобы получить правильные комментарии при нажатии на определенную статью
function showCommentBox(){
$('.comments').empty();
$('#comment').val("");
articleID = $(this).attr('data-article-id');
$.get('/comments/' + articleID, function(data){
if(data.article){ //This is undefined*********************
for(var x = 0; x < data.comment.length; x++){
$('.comments').append("<div><h2>" + data.comment[x].comment + "</h2><span><button>×</button></span></div>");
}
}
$('.main-popup').fadeIn();
});
}
// Получить маршрут в контроллере
router.get('/comments/:id', function(req, res){
Comment.findOne({ "article": req.params.id }).populate("article").exec(function(err, doc){
if(err){
console.log(err)
}else{
res.json(doc);
}
});
});
// Статья Модель
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ArticleSchema = new Schema({
title: {
type: String
},
link: {
type: String
},
description: {
type: String
},
img: {
type: String
}
});
var Article = mongoose.model("Article", ArticleSchema);
module.exports = Article;
// Комментарий Модель
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var CommentSchema = new Schema({
comment: {
type: String
},
article: {
type: Schema.Types.ObjectId,
ref: 'Article'
}
});
var Comment = mongoose.model('Comment', CommentSchema);
module.exports = Comment;
Хорошо, спасибо за вход. Однако, мне кажется, мне нужно два вызова в базу данных. Когда пользователь нажимает кнопку комментариев, это делает мои комментарии модальными для отображения. Кнопка отправки внутри моего модальности комментариев - это то, что делает почтовый запрос. – henhen
@ANonymous Я говорил о другом. Вы делаете 2 вызова вместо 1 внутри своей конечной точки POST. 1) .save go to to mongo 2) .findOneInUpdate перейти к mongo и модифицировать один и тот же документ. Это нужно сделать за один звонок. –