mongodb, express.js। दस्तावेज़ों के सरणी में नया डॉक्टर जोड़ें चयनकर्ता आईडी है

Nov 26 2020

मैं एक नए दस्तावेज़ को दस्तावेज़ों की एक सरणी में जोड़ना चाहता हूं। तो मैं अपने परम में उत्तीर्ण होता हूं जो कि मैं जो दस्तावेज़ जोड़ना चाहता हूं, वह है। फिर मुझे इसे केवल सरणी में जोड़ने की आवश्यकता है। मुझे लगा कि मेरे पास यह काम है, लेकिन यह वास्तव में उस सरणी में एक नेस्टेड सरणी जोड़ रहा था। मुझे इसका एहसास हुआ क्योंकि मैं इसे क्रमबद्ध करने की कोशिश कर रहा हूं इसलिए नए जोड़े गए दस्तावेज़ शीर्ष पर हैं। इसलिए मैंने वापस जाने और अपने ऐड क्वेरी को ठीक करने का प्रयास किया। अब तक यह मूल रूप से सिर्फ यह कहता है कि मूल्यों को नहीं जोड़ा जा सकता है। यही कारण है कि मैं mongodb क्लाइंट, एक्सप्रेस, वेट का उपयोग कर रहा हूं।

मैं मेनगोडब मैनुअल को देख रहा हूं और कोशिश कर रहा हूं कि उनके पास क्या है, लेकिन इसे काम करने के लिए नहीं मिल सकता है, जाहिर है कि मेरे नए दस्तावेज़ को जोड़ने में कुछ गड़बड़ है। किसी को भी इस मुद्दे को देखने या मुझे एक उदाहरण दिखा? धन्यवाद!

app.post("/addComment/:id", async (request, response) => {
    let mongoClient = new MongoClient(URL, { useUnifiedTopology: true });
    try {
        await mongoClient.connect(); 
        let id = new ObjectId(request.sanitize(request.params.id));

       
        request.body.comments = { $push: {"comments.author": "myTestPOSTMAN - 1", "comments.comment": "myTestCommPostMan - 1"}}; let selector = { "_id":id }; //let newValues = {$push: {"comments.comment": "myTestCommPostMan - 1", "comments.author": 
        "myTestPOSTMAN - 1"}};
        let newValues = request.body.comments;
        let result = await mongoClient.db(DB_NAME).collection("photos").updateOne(selector, 
        newValues);

        if (JSON.parse(result).n <= 0) {
            response.status(404);
            response.send({error: "No documents found with ID"});
            mongoClient.close();
            return;
        }
        response.status(200);
        response.send(result);     
    } catch (error) {
        response.status(500);
        response.send({error: error.message});
        throw error;
    } finally {
        mongoClient.close();
    }
});

पोस्ट मैन का उपयोग करना यह वही है जो मेरा जौन दिखता है और दस्तावेज़ों की सरणी ऐसी दिखती है जैसे मैं जोड़ने की कोशिश कर रहा हूं।

 {"comments": [
                {
                    "comment": "pm - test3",
                    "author": "pm - test4"
                }
            ]
        }

जवाब

turivishal Nov 26 2020 at 21:42
  • फ़ंक्शन के बाहर मोंगॉडब कनेक्शन करें, फ़ंक्शन कॉल करने पर कनेक्ट करने और डिस्कनेक्ट करने की कोई आवश्यकता नहीं है, असामान्य चर बहुत अधिक न बनाएं।
  • पुश ऑब्जेक्ट के लिए आपको मुख्य कुंजी नाम प्रदान करने और ऑब्जेक्ट को असाइन करने की आवश्यकता है।
let mongoClient = new MongoClient(URL, { useUnifiedTopology: true });
await mongoClient.connect();
app.post("/addComment/:id", async (request, response) => {

    try {

        let result = await mongoClient.db(DB_NAME).collection("photos").updateOne(
            { "_id": new ObjectId(request.sanitize(request.params.id)) }, 
            { $push: { comments: request.body.comments } }
        );
        if (JSON.parse(result).n <= 0) {
            response.status(404).send({ error: "No documents found with ID" });
            return;
        }
        response.status(200).send(result);

    } catch (error) {
        response.status(500).send({ error: error.message });
    }

});