কেন আপনি মঙ্গুজ ক্যোয়ারী দ্বারা ফিরে আসা ডেটা সংশোধন করতে পারবেন না (উদা: সন্ধানবিআইডি)


95

আমি যখন কোনও মঙ্গুজ ক্যোয়ারী দ্বারা ফিরিয়ে নেওয়া ডেটার যে কোনও অংশ পরিবর্তন করার চেষ্টা করি তখন এর কোনও প্রভাব হয় না।

আমি গতকাল প্রায় 2 ঘন্টা ধরে এটি বের করার চেষ্টা করছিলাম, সমস্ত ধরণের _.clone()এস সহ, অস্থায়ী স্টোরেজ ভেরিয়েবল ইত্যাদি ব্যবহার করে Finally তাই আমি ভবিষ্যতে কারও কাছে ধারণা পেয়েছি (ফিউইউউচার!) সম্ভবত সেভ সমস্যাটি রয়েছে।

Survey.findById(req.params.id, function(err, data){
    var len = data.survey_questions.length;
    var counter = 0;

    _.each(data.survey_questions, function(sq){
        Question.findById(sq.question, function(err, q){
            sq.question = q; //has no effect

            if(++counter == len) {
                res.send(data);
            }
        });
    });
});


সম্ভাব্য সদৃশ stackoverflow.com/q/9952649/4748042
Martinho

উত্তর:


162

এর মতো ক্ষেত্রে যেখানে আপনি পুরো মডেলের উদাহরণের পরিবর্তে একটি সরল জেএস অবজেক্ট চান, আপনি lean()কোয়েরি শৃঙ্খলে কল করতে পারেন :

Survey.findById(req.params.id).lean().exec(function(err, data){
    var len = data.survey_questions.length;
    var counter = 0;

    _.each(data.survey_questions, function(sq){
        Question.findById(sq.question, function(err, q){
            sq.question = q;

            if(++counter == len) {
                res.send(data);
            }
        });
    });
});

এই dataউপায়টি ইতিমধ্যে একটি সাধারণ জেএস অবজেক্ট যা আপনার প্রয়োজন অনুসারে আপনি হেরফের করতে পারেন।


8
বিটিডাব্লু @ জননিএইচকে কেবল আবার ধন্যবাদ বলতে চাইছিল। দেড় বছর পরে একজন ক্লায়েন্টকে কিছু ডিবাগ করতে সহায়তা করছিল। তিনি একটি সপ্তাহান্তে কিছু বের করার চেষ্টা করে কাটিয়েছিলেন, দেখা যাচ্ছে কারণ তিনি মঙ্গুজ অবজেক্টটি সংশোধন করার চেষ্টা করছেন; পি
টালি

4
2 বছর পরে এবং এখনও এটি ক্রাশ করছে। পাতলা () সেখানে ছিল বুঝতেও পারিনি।
পেট্রোগড

4
@ ফিজিক্স aggregateসর্বদা প্লেইন অবজেক্ট হিসাবে এর ফলাফল সরবরাহ করে, তাই এর প্রয়োজন নেই lean()
জনিএইচকে

4
3 বছর পরে এবং ব্যয় করেছে এবং পুরো ঘন্টাটি এটি বের করার চেষ্টা করছে। আমার সারা দিন বাঁচা! ধন্যবাদ
নয়

4
ধন্যবাদ! এটি সত্যই সহায়তা করেছে তবে কেন অবজেক্টটি সংশোধন করা অসম্ভব? এটি কোন ধরণের বিশেষ বিষয়?
রবার্ট ফেদু

46

আমি মনে করি মঙ্গুজের ডকুমেন্টেশন এটিকে যথেষ্ট পরিষ্কার করে না, তবে কোয়েরিতে ফিরে আসা ডেটা (যদিও আপনি এটি পুনরায় বিক্রি করতে পারেন) এটি আসলে একটি মঙ্গুজ ডকুমেন্ট অবজেক্ট এবং কোনও জেএসএন বস্তু নয়। তবে আপনি এটি এক লাইনের সাথে ঠিক করতে পারেন ...

Survey.findById(req.params.id, function(err, data){
    var len = data.survey_questions.length;
    var counter = 0;

    var data = data.toJSON(); //turns it into JSON YAY!

    _.each(data.survey_questions, function(sq){
        Question.findById(sq.question, function(err, q){
            sq.question = q;

            if(++counter == len) {
                res.send(data);
            }
        });
    });
});

12
আপনি এটিও ব্যবহার করতে পারেন toObject()যা toJSON()কম বিভ্রান্তিকর নাম হিসাবে একই জিনিসটি করে ।
জনিএইচকে

4
এটি কি বিকাশকারীদের রেখে দেওয়া ভার্চুয়ালগুলি থেকেও মুক্তি পাবে?
mjwrazor

5
TypeError: data.toObject is not a functionআমি এটি পেয়েছিtoJSON
লুজান বড়াল

পরিবর্তনের পরিবর্তে result, আমি সংশোধন করতে সক্ষম হয়েছি result._doc
নবম চিলি

@ লুজান বড়াল থ্যাটস কারণ আপনি অ্যারে অবজেক্টের জন্য এই ফাংশনটি ব্যবহার করছেন। JSON.parse(JSON.stringify(data))পরিবর্তে অবজেক্টের অ্যারেগুলির জন্য ব্যবহার করুন
মোহিত
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.