![](/img/trans.png)
[英]Post Form Data to Array of Existing MongoDB Document using Express and Mongoose
[英]Mongoose - MongoDB - Express: Pushing data in a field that is 3 levels deep in a embedded document
我试图实现或想知道是否有可能将数据放入“ TopicSchema”中的注释字段中:
var mongoose = require('mongoose');
var TopicSchema = new mongoose.Schema({
username: String,
topic: String,
description: String,
category: String,
created_at: {type: Date, default: Date.now},
posts: [
{
postUsername: String,
post: String,
postUpvote: {type: Number, default: 0},
postDownvote: {type: Number, default: 0},
created_at: {type: Date, default: Date.now},
comments: [
{
commentUsername: String,
comment: String,
created_at: {type: Date, default: Date.now}
}
]
}
]
});
mongoose.model('Topics', TopicSchema);
这是到目前为止,当我尝试在TopicsSchema中添加注释时
var Topics = mongoose.model('Topics');
var topicUpdate = {
$push: {
"posts:" {
"comments": {
commentUsername: req.body.username,
comment: req.body.comment
}
}
}
}
Topics.update({_id: req.body.topicId}, topicUpdate, function(err, status) {
console.log(status);
if (err) {
console.log('Error adding comment to topic');
res.json(false);
} else {
console.log('Success adding comment to topic');
res.json(true);
}
})
它在这里插入:
var topicUpdate = {
$push: {
"posts:" {
"comments": {
commentUsername: req.body.username,
comment: req.body.comment
}
}
}
}
它正在添加一个新的posts数组,而不是插入到我在TopicSchema中具有的正确的posts数组中,但是它正在添加一个新的posts字段,并且注释也包含在这些post中,这不是我想要实现的。 我希望将评论分别添加到正确的帖子字段中,而不是每次都添加带有评论的新帖子字段。
我终于解决了它,对于3级深度的嵌入式文档而言,这似乎非常具有挑战性。
我的逻辑是先按主题ID查找主题,然后使用从该主题ID中接收到的数据,首先必须遍历我收到的数据,并且如果帖子ID与我正在寻找的帖子ID相匹配,然后我会将评论推送到该子数组。 之后,我将不得不使用更改后的新数据,然后使用推送注释的数据来更新数据。 我要做的最后一件事是再次找到该主题以发送给客户端。
这是我必须完成的代码:
Topics.findOne({_id: req.body.topicId}, function(err, data) {
if (err) { res.json(false) }
else {
for (var i = 0; i < data.posts.length; i++) {
if(data.posts[i]._id == req.body.postid) {
data.posts[i].comments.push({comment: req.body.comment, commentUsername: req.body.username }); }
}
Topics.update({_id: req.body.topicId}, data, function(err, status) {
if (err) { console.log('Error updating whole topic'); res.json(false) }
else {
Topics.findOne({_id: req.body.topicId}, function(err, data) {
if (err) {
console.log('Error finding comments');
res.json(status);
} else {
console.log('Success getting comments');
res.json(data);
}
})
}
});
是的我知道。 我学到的教训是现在不要在此类应用程序中深入使用3个级别的嵌入式文档。 但是,嘿! :)并且希望我也已经帮助了某人!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.