[英]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.