আপনার কাজ শেষ হয়ে গেলে যথাযথভাবে মঙ্গুসের সংযোগটি বন্ধ করুন


145

আমি একটি স্ক্রিপ্টে মঙ্গুজ ব্যবহার করছি যা অবিরত চালানো নয়, এবং আমি খুব সাধারণ বিষয় বলে মনে করি তা সত্ত্বেও আমি এর উত্তর পাই না; আমি কেবল এমন কোনও মঙ্গস ফাংশনে কল করি যা আমার নোডেজ উদাহরণটি কখনও থামে না এবং আমাকে এটি নিজেই মেরে ফেলতে হবে, বলুন, সিটিআরএল + সি বা প্রোগ্রাম.এক্সিট () দিয়ে মঙ্গুজে ফাংশনে কল করুন।

কোডটি মোটামুটি এরকম দেখাচ্ছে:

var mongoose = require('mongoose');

// if my program ends after this line, it shuts down as expected, my guess is that the connection is not really done here but only on the first real request ?
mongoose.connect('mongodb://localhost:27017/somedb'); 

// define some models

// if I include this line for example, node never stop afterwards
var MyModel =  mongoose.model('MyModel', MySchema);

আমি মঙ্গুজ.ডিসকনেক্ট () তে কলগুলি যুক্ত করার চেষ্টা করেছি তবে ফলাফল হয়নি। এটি বাদ দিয়ে, সবকিছু ঠিকঠাক কাজ করে (সন্ধান, সংরক্ষণ, ...)।

এটি হ'ল এই ব্যক্তির মতোই একই সমস্যা, দুঃখের সাথে তিনি কোনও উত্তর পান নি: https://groups.google.com/group/mongoose-orm/browse_thread/thread/c72cc1c51c76e661

ধন্যবাদ

সম্পাদনা: প্রযুক্তিগতভাবে সঠিক হওয়ায় নীচের উত্তরটি স্বীকার করে নিয়েছে, তবে কেউ যদি আবার কখনও এই সমস্যায় পড়ে তবে মনে হয় যে মংগস এবং / অথবা মংডোব ড্রাইভারটি এখনও জিজ্ঞাসা চলছে কিনা তা জিজ্ঞাসা করলে আসলে সংযোগটি বন্ধ করে দেয় না।

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

সুতরাং সেখানে আপনার এটি রয়েছে: নিশ্চিত হয়ে নিন যে প্রতিটি ক্যোয়ারী সংযোগ বিচ্ছিন্ন করার আগে কল করা হয়েছে () আপনি যদি এটি আসলে কাজ করতে চান তবে actually


1
কেবল কোনও মডেল আমদানি করে কি এটি করার কোনও উপায় আছে? নীচের উত্তরগুলির মধ্যে
অ্যান্টনি

উত্তর:


201

আপনি সাথে সংযোগ বন্ধ করতে পারেন

mongoose.connection.close()

25
এটি আসলে সংযোগটি বন্ধ করে দেয়। তবে এই কলটি আমার ডাটাবেসে থাকা সামগ্রীগুলি সাফ করছিল। আমি যখন মঙ্গুজ.ডিসকনেক্টে স্যুইচ করেছি () সবকিছু ঠিকঠাকভাবে কাজ করেছে এবং আমার মোচা টেস্টগুলি আবার সঠিকভাবে কাজ করা শুরু করেছে
ব্রায়ান নূহ

1
এটি আমার পক্ষে কাজ করেছে। আমি কেবল এটি সঠিক কলব্যাকে রেখেছি তা নিশ্চিত করার দরকার ছিল অন্যথায় এটি সম্ভবত সংযোগটি বন্ধ করে দিচ্ছিল ডেটাবেসে সংরক্ষণ করার আগে কোনও সুযোগ শেষ হওয়ার আগে। ন্যায়সঙ্গত হওয়ার জন্য, আমি এখনও একটি সাধারণ স্ক্রিপ্ট ব্যবহার করছি যা কেবলমাত্র স্থানীয় ডিবিতে সংযুক্ত হয় এবং একটি সাধারণ উদাহরণ ব্যবহারকারী অবজেক্টটি সংরক্ষণ করে। ক্রেজব্যাক টু ইউজারআরসেভ () তে আমি কল করে থাকি যেখানে মঙ্গুজ.কনেকশন.ক্লোজ ()।
ফ্যাটনুলার

6
আপনি দেখতে পাচ্ছেন, এই উত্তরগুলি পুরানো। আপনি ব্যবহার করেন, তাহলে নকুল 5.0.4 , পদ্ধতি শুধুমাত্র রপ্তানি করা হয়, শুধুমাত্র উপলব্ধ, তাই এটি ব্যবহার করুন। Connection.close()
23 Ван

74

অন্য উত্তরটি আমার পক্ষে কার্যকর হয়নি। এই উত্তরেmongoose.disconnect(); বর্ণিত হিসাবে আমাকে ব্যবহার করতে হয়েছিল ।


পরীক্ষার পরিবেশ ছিন্ন করার সময় এটিকেও অগ্রাধিকার দেওয়া হয়।
ম্যাট লো

1
মংগুজ.ডিসকনেক্ট () ব্যবহার করা ভাল এবং একটি লজিক্যাল অ্যাপ্রোচ।
আবদুল আলীম শাকির

17

আপনি কোনও ভেরিয়েবলের সাথে সংযোগটি সেট করতে পারেন এবং আপনার কাজ শেষ হয়ে গেলে এটি সংযোগ বিচ্ছিন্ন করতে পারেন:

var db = mongoose.connect('mongodb://localhost:27017/somedb');

// Do some stuff

db.disconnect();

আমার পরিস্থিতিতে (জেস্টের অভ্যন্তরে মঙ্গুজ পরীক্ষা করা) এটিই একমাত্র সমাধান যা কাজ করেছিল
কোড হুইস্পের

আমি মোডজোর সাথে মডেল.আপডেট (..) করি একটি লুপের মধ্যে। প্রতিটি আপডেটের পরে কি সংযোগ বন্ধ করা দরকার? আমার সার্ভারকে অনেকগুলি আপডেট পরিচালনা করতে হবে এবং কিছুক্ষণ পরে কাজ বন্ধ করে দেওয়া হয়েছে।
পিল

নীচের হিসাবে একই উত্তর
ড্যানিয়েল ডব্লিউ। 15

3

আমি ৪.৪.২ সংস্করণ ব্যবহার করছি এবং অন্যান্য উত্তরগুলির কোনওোটাই আমার পক্ষে কাজ করেনি। তবে useMongoClientবিকল্পগুলিতে যুক্ত করা এবং আপনি যে ভেরিয়েবলটির কল closeকরেন তাতে এটি স্থাপন করা কার্যকর মনে হয়েছিল।

var db = mongoose.connect('mongodb://localhost:27017/somedb', { useMongoClient: true })

//do stuff

db.close()

1

আপনি যদি পদ্ধতির বাইরে / সংযোগ বিচ্ছিন্ন করার চেষ্টা করেন তবে আপনি একটি ত্রুটি পাবেন। পদ্ধতির দুটি কলব্যাকের সংযোগটি বন্ধ করে দেওয়া সবচেয়ে ভাল সমাধান। ডামি কোডটি এখানে।

const newTodo = new Todo({text:'cook dinner'});

newTodo.save().then((docs) => {
  console.log('todo saved',docs);
  mongoose.connection.close();
},(e) => {
  console.log('unable to save');
});

1

ঠিক যেমন জ্যাক উইলসন বলেছেন: আপনি কোনও ভেরিয়েবলের সাথে সংযোগটি সেট করতে পারেন তারপরে আপনার কাজ শেষ হয়ে গেলে এটি সংযোগ বিচ্ছিন্ন করুন:

let db;
mongoose.connect('mongodb://localhost:27017/somedb').then((dbConnection)=>{
    db = dbConnection;
    afterwards();
});


function afterwards(){

    //do stuff

    db.disconnect();
}

বা যদি অ্যাসিঙ্ক ফাংশনের ভিতরে থাকে:

(async ()=>{
    const db = await mongoose.connect('mongodb://localhost:27017/somedb', { useMongoClient: 
                  true })

    //do stuff

    db.disconnect()
})

অন্যথায় যখন আমি আমার পরিবেশে এটি পরীক্ষা করছিলাম তখন এটির একটি ত্রুটি রয়েছে।


0

সম্ভবত আপনি এটি আছে:

const db = mongoose.connect('mongodb://localhost:27017/db');

// Do some stuff

db.disconnect();

তবে আপনার এ জাতীয় কিছু থাকতে পারে:

mongoose.connect('mongodb://localhost:27017/db');

const model = mongoose.model('Model', ModelSchema);

model.find().then(doc => {
  console.log(doc);
}

আপনি কল করতে পারবেন না db.disconnect()তবে আপনি সংযোগটি ব্যবহার করার পরে বন্ধ করতে পারবেন।

model.find().then(doc => {
  console.log(doc);
}).then(() => {
  mongoose.connection.close();
});
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.