मैं एक वेबसाइट बना रहा हूं और मैं कुछ डेटा सीड करना चाहता हूं।

मैं प्रत्येक दो टिप्पणियों के साथ दो लेख बनाना चाहता हूं:

var mongoose = require("mongoose"),
    Article = require("./models/articles.js"),
    Comment = require("./models/comments.js");

var articleData = [
    {
        title: "Fast Cars",
        author: "Steve Novak",
        company: "AthLead",
        body: "SOME TEXT"
    },
    {
        title: "New Design",
        author: "Kevin Garnett",
        company: "Revoos",
        body: "COOL ARTICLE"
    }
];

var commentData = [
    {
        body: "I really love the new design",
        author: "Mark Cuban"
    },
    {
        body: "This is hitting my funny bone",
        author: "Lisa Jones"
    }
];

मैं पिछली सभी टिप्पणियों और लेखों को हटा रहा हूं।

फिर प्रत्येक लेख के लिए मैं पहले लेख बना रहा हूं और फिर दो टिप्पणियों को आगे बढ़ा रहा हूं।

मुझे नवगठित आलेख को डेटाबेस में सहेजने में समस्या हो रही है:

Article.save() को 1 पर रखने से समानांतर save() त्रुटि उत्पन्न होती है

जबकि 2 पर रखने से कोई टिप्पणी सेव नहीं होती है।


function seedDB() {
    Comment.deleteMany({}, function (err) {
        if (err) {
            console.log(err);
        }
        Article.deleteMany({}, function (err) {
            if (err) {
                console.log(err);
            }

                articleData.forEach(function (article) {
                    Article.create(article, function (err, article) {
                        if (err) {
                            console.log(err);
                        } else {
                            commentData.forEach(function(comment) {
                                Comment.create(comment, function (err, comment) {
                                    if (err)
                                        console.log(err);
                                    else {
                                        article.comments.push(comment);
                                        //     PROBLEM
                                        // 1. article.save();
                                    }

                                })
                            })
                            // PROBLEM
                            //2. article.save();
                        }
                    });
                });

            });


        });
    });

    console.log("Database Reset");
}



module.exports = seedDB;

2
shashank singh 23 जिंदा 2020, 12:45

2 जवाब

सबसे बढ़िया उत्तर

आप वर्तमान में कॉलबैक नरक में हैं और async/await का उपयोग करने से आपके कोड को पढ़ने योग्य बनाने में काफी मदद मिलेगी और इस प्रकार डीबग करना आसान है।

निम्नलिखित कार्यप्रवाह पर विचार करें जो async/await का उपयोग करता है

async function seedDB() {
    try {
        // clean up all comments
        await Comment.deleteMany({}).exec()

        // clean up all articles
        await Article.deleteMany({}).exec()

        // create articles
        await Article.create(articleData)

        // create comments 
        const comments = await Comment.create(commentData)

        // update articles with the new comments
        const updatedArticles = await Article.updateMany(
            {}, 
            { '$set': { comments } }
        ).exec()

        console.log(updatedArticles)

    } catch (err) {
        console.error(err)
    }
}
1
chridam 23 जिंदा 2020, 13:40

जब आप पहली बार Article.create..., सफलतापूर्वक निर्माण पर फ़ंक्शन लेख ऑब्जेक्ट या दूसरी तरफ त्रुटि लौटाते हैं।

प्रत्येक लेख में टिप्पणियाँ शामिल करने के लिए आपको नए बनाए गए आलेख में forEach लूप चलाने की आवश्यकता है।

आपको मौजूदा नव निर्मित आलेख डेटा के साथ काम करने की आवश्यकता है।

उदाहरण

articleData.forEach(function (article) {
  Article.create(article, function (err, article) {
    if (err) {
     console.log(err);
    } else {
      article.update(
       { "_id": ObjectId(article.id) },
       { $push: { comments: commentData } }
      );
      // OR try something like 
      // article.comments = commentData
      // OR
      // article.comments.insert(commentData)
      article.save();
    }
  });
});
0
Themistoklis Bogiatzoglou 23 जिंदा 2020, 13:21