簡體   English   中英

Mongoose-MongoDB-Express:在嵌入式文檔中深3級的字段中推送數據

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM