আমি কীভাবে নোড.জেএস মঙ্গুজ ব্যবহার করে নথিগুলি সরিয়ে ফেলব?


291
FBFriendModel.find({
    id: 333
}, function (err, docs) {
    docs.remove(); //Remove all the documents that match!
});

উপরেরটি কাজ করে বলে মনে হচ্ছে না। রেকর্ড এখনও আছে।

কেউ কি ঠিক করতে পারবেন?

উত্তর:


489

যদি আপনার পুনরাবৃত্তি হওয়ার মতো মনে হয় না, তবে চেষ্টা করুন FBFriendModel.find({ id:333 }).remove( callback );বাFBFriendModel.find({ id:333 }).remove().exec();

mongoose.model.findএকটি ক্যোয়ারী দেয় , যার একটি removeফাংশন রয়েছে

মঙ্গুজ v5.5.3 এর জন্য আপডেট - remove()এখন হ্রাস করা হয়েছে। ব্যবহার করুন deleteOne(), deleteMany()বাfindOneAndDelete() instead.


3
এটি কি মিডলওয়্যারের প্রাক / পোস্ট-অপসারণ চালায়? (কিছু মডেল পদ্ধতি নথির মিডওয়্যারের বাইপাস করে এবং আমি নিশ্চিত নই যে
এটির মধ্যে

12
আমি মনে করি @ হুন্তরলফটিস এটি ইতিমধ্যে খুঁজে পেয়েছে তবে অন্য যে কেউ উত্তরটি পড়ছেন তাদের পক্ষে এটি হ'ল না, এটি স্বতন্ত্র ডক্সে প্রি / পোস্ট মিডলওয়্যার চালাবে না।
1311407

এটি মনে হয় অন্যান্য উত্তরগুলির অনেকগুলি উল্লেখ রয়েছে .exec()তবে এটি মোটেও নয়। .exec()প্রয়োজন, এটি ব্যবহার করার পার্শ্ব প্রতিক্রিয়া আছে কি না?
ড্যানএইচ

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

1
দুর্দান্ত উত্তর! কলব্যাকের যুক্তিগুলি কী?
k88074

299

আপডেট: মঙ্গুজ সংস্করণ (5.5.3)

মুছে ফেলা () অবচিত করা হয় এবং আপনি এর পরিবর্তে মুছে ফেলা (), মুছে ফেলুন (), বা বাল্ক রাইট () ব্যবহার করতে পারেন।

এর হিসাবে "mongoose": ">=2.7.1"আপনার সাথে সরাসরি ডকুমেন্ট অপসারণ করতে পারেন .remove()বরং ডকুমেন্ট খুঁজে পেতে এবং তারপর এটি সরানোর যা আমার আরও দক্ষ এবং বজায় রাখা সহজ বলে মনে হয় তুলনায় পদ্ধতি।

উদাহরণ দেখুন:

Model.remove({ _id: req.body.id }, function(err) {
    if (!err) {
            message.type = 'notification!';
    }
    else {
            message.type = 'error';
    }
});

হালনাগাদ:

মঙ্গুজ হিসাবে, 3.8.1বেশ কয়েকটি পদ্ধতি রয়েছে যা আপনাকে সরাসরি কোনও দস্তাবেজ সরাতে দেয়, বলুন:

  • remove
  • findByIdAndRemove
  • findOneAndRemove

আরও তথ্যের জন্য মঙ্গুজ এপিআই ডক্স পড়ুন ।


13
অন্যান্য উত্তরের অন্যান্য মন্তব্যে যেমন উল্লেখ করা হয়েছে, এটি মিডওয়্যারকে বাইপাস করেছে যা স্কিমাতে সংজ্ঞায়িত হয়েছে, এবং এটি সত্যই বিপজ্জনক হতে পারে। সুতরাং আপনি যদি প্রভাবটি বুঝতে পারেন তবে এটি ব্যবহার করুন। আরও তথ্যের জন্য, mongoosejs.com
মিলডওয়্যার

2
কেবল রেকর্ডের জন্য, এখন অবধি আমি এগুলি সর্বদা কোনও পার্শ্ব প্রতিক্রিয়া ছাড়াই ব্যবহার করেছি, অবশ্যই, আমার প্রকল্পগুলিতে কোনও মিডলওয়্যার ব্যবহার করতে হয়নি :)
ডায়োসনি

8
remove(query)আপনি যদি দুর্ঘটনাক্রমে পাস করেন তবে আপনার সম্পূর্ণ সংগ্রহটি খালি করতে পারে query = {}। সেই কারণে আমি পছন্দ করি findOneAndRemove(query)যদি আমি কেবল একটি নথি অপসারণ করি ।
জোয়েটউইডল

1
এছাড়াও মনে রাখবেন যে এটি কোনও কোয়েরি ফিরিয়ে দিচ্ছে না, তাই কোনও প্রতিশ্রুতিও দিচ্ছে না। আপনি করতে পারবেন না কিModel.remove({ _id: 'whatever' }).exec().then(...)
ডেভিড

48

docsনথিগুলির একটি অ্যারে। সুতরাং এটির কোনও mongooseModel.remove()পদ্ধতি নেই।

আপনি পুনরাবৃত্তি করতে পারবেন এবং অ্যারের প্রতিটি দস্তাবেজ আলাদাভাবে মুছে ফেলতে পারেন।

বা - যেহেতু দেখে মনে হচ্ছে আপনি কোনও (সম্ভবত) অনন্য আইডি দ্বারা নথিগুলি সন্ধান করছেন - এর findOneপরিবর্তে ব্যবহার করুন find


5
এই উত্তরটি মঙ্গুজের একটি পুরানো সংস্করণ হিসাবে ধরে নিয়েছে দেখে আমি সত্যই গ্রহণযোগ্য উত্তরটি পরিবর্তন করে কারও আপত্তি করব না।
mtkopone

এটি এটি করার সর্বোত্তম উপায়গুলির মধ্যে একটি কারণ এটি স্কিমায় সংজ্ঞায়িত মিডলওয়্যারটিকে সঠিকভাবে আহ্বান করে - mongoosejs.com / ডকস / মিলডওয়ারওয়্যারটি html দেখুন । আপনি কেবলমাত্র অন্য পদ্ধতিগুলি ব্যবহার করতে পারেন যদি আপনি আপনার অ্যাপ্লিকেশনটিতে মিডলওয়্যার ব্যবহার না করে থাকেন এবং তারপরে সতর্কতার সাথে।
জেড ওয়াটসন

41

এটি আমার জন্য সংস্করণ 3.8.1 হিসাবে সেরা:

MyModel.findOneAndRemove({field: 'newValue'}, function(err){...});

এবং এটির জন্য কেবল একটি ডিবি কল প্রয়োজন। আপনি removeঅনুসন্ধান এবং অপসারণের জন্য পিয়োরের কোনও ক্রিয়াকলাপ সম্পাদন করবেন না এমনটি এটিকে ব্যবহার করুন।


1
যতক্ষণ আপনার pre 'remove'ক্রিয়া সঞ্চালনের দরকার নেই ততক্ষণ এটি ঠিকঠাক কাজ করে।
ড্যানিয়েল কুমাক

32

সহজভাবে কর

FBFriendModel.remove().exec();

1
সহজ এবং কার্যকর।
ধনী আপোডাচ

1
এটি কি প্রতিশ্রুতি দেয়? যদি তাই হয়, প্রতিশ্রুতি সংশোধন করা হলে কোন বিষয়টিকে সংজ্ঞায়িত করা হয়?
কেনি ওয়ার্ডেন

একটি কার্যকর পদ্ধতির @KennyWorden উত্তর খুঁজে -> mongoosejs.com/docs/api.html তারপর আপনি যা চান তা কিন্তু শুরুতে যোগ করার যেমন '#save' খোঁজ আপনার ব্রাউজারে সাথে ইন-পৃষ্ঠা অনুসন্ধান '#' জন্য অনুসন্ধান এবং আপনি আমি দেখতে পাচ্ছি এটি একটি প্রতিশ্রুতি দেয়।
জেসন সেব্রিং

3
অপসারণের জন্য নির্দিষ্ট করা
অপশনটি না রেখেই

29

mongoose.model.find()একটি ক্যোয়ারী অবজেক্ট প্রদান করে যার একটি remove()ফাংশনও রয়েছে।

আপনি mongoose.model.findOne()কেবল একটি অনন্য দস্তাবেজ মুছে ফেলতে চাইলে আপনিও এটি ব্যবহার করতে পারেন ।

অন্যথায় আপনি প্রথমে নথিটি পুনরুদ্ধার করতে এবং তারপরে অপসারণের পাশাপাশি .তিহ্যগত পদ্ধতির অনুসরণ করতে পারেন।

yourModelObj.findById(id, function (err, doc) {
    if (err) {
        // handle error
    }

    doc.remove(callback); //Removes the document
})

modelদস্তাবেজ (গুলি) অপসারণের জন্য নীচের যেকোন কিছু করতে পারেন নীচে নিম্নলিখিত উপায়গুলি :

yourModelObj.findOneAndRemove(conditions, options, callback)

yourModelObj.findByIdAndRemove(id, options, callback)

yourModelObj.remove(conditions, callback);

var query = Comment.remove({ _id: id });
query.exec();

22

remove()অবচয় করা হয়েছে। ব্যবহার করুন deleteOne(), deleteMany()বাbulkWrite()

আমি যে কোডটি ব্যবহার করি

TeleBot.deleteMany({chatID: chatID}, function (err, _) {
                if (err) {
                    return console.log(err);
                }
            });

1
এই উত্তরটির জন্য আরও সতর্কতা দরকার। এটি ব্যারেলের নীচে অন্যায়ভাবে স্থাপন করা হয়েছে (কারণ এটি পুরাতন ভোটের অর্ধ দশক পাচ্ছে না), তবে একমাত্র উত্তর যা এই সমস্যার সমাধান করে:(node:9132) DeprecationWarning: collection.remove is deprecated. Use deleteOne, deleteMany, or bulkWrite instead.
স্টিভেন ভেন্টিমিগলিয়া

18

সাধারণ করতে আপনি ব্যবহার করতে পারেন:

SomeModel.find( $where, function(err,docs){
  if (err) return console.log(err);
  if (!docs || !Array.isArray(docs) || docs.length === 0) 
    return console.log('no docs found');
  docs.forEach( function (doc) {
    doc.remove();
  });
});

এটি অর্জনের আর একটি উপায় হ'ল:

SomeModel.collection.remove( function (err) {
  if (err) throw err;
  // collection is now empty but not deleted
});

18

সন্ধান করুন এবং মুছে ফেলার সাথে সাবধান!

  User.findOne({name: 'Alice'}).remove().exec();

উপরের কোড অপসারণ সকল ব্যবহারকারীদের এলিস 'পরিবর্তে নামে প্রথম এক শুধুমাত্র।

যাইহোক, আমি এই জাতীয় দস্তাবেজগুলি সরাতে পছন্দ করি:

  User.remove({...}).exec();

অথবা একটি কলব্যাক সরবরাহ করুন এবং নির্বাহককে বাদ দিন ()

  User.remove({...}, callback);


12

আপনি যদি কেবল একটি অবজেক্ট অপসারণের সন্ধান করছেন তবে আপনি এটি ব্যবহার করতে পারেন

Person.findOne({_id: req.params.id}, function (error, person){
        console.log("This object will get deleted " + person);
        person.remove();

    });

এই উদাহরণে, মঙ্গুজ req.params.id এর সাথে মিল রেখে মুছে ফেলবে।


স্ট্যাকওভারফ্লোতে আপনাকে স্বাগতম। আপনার উত্তরটি এই থ্রেডের একাধিক উত্তরের সদৃশ। এছাড়াও, আপনার কলব্যাকগুলিতে সর্বদা ত্রুটি পরীক্ষা করা উচিত।
ভিটিওকর্লিওন

9

.remove()যেমন কাজ করে .find():

MyModel.remove({search: criteria}, function() {
    // removed.
});

9

আমি প্রতিশ্রুতি চিহ্নিতকরণ পছন্দ, যেখানে আপনার যেমন প্রয়োজন

Model.findOneAndRemove({_id:id})
    .then( doc => .... )

7

দস্তাবেজ অপসারণ করার জন্য, আমি ব্যবহার পছন্দ করি Model.remove(conditions, [callback])

সরানোর জন্য দয়া করে এপিআই ডকুমেন্টেশন উল্লেখ করুন: -

http://mongoosejs.com/docs/api.html#model_Model.remove

এই ক্ষেত্রে কোডটি হবে:

FBFriendModel.remove({ id : 333 }, function(err, callback){
console.log(‘Do Stuff’);
})

আপনি যদি মঙ্গোডিবি থেকে কোনও প্রতিক্রিয়ার জন্য অপেক্ষা না করে নথিগুলি সরিয়ে ফেলতে চান, কলব্যাকটি পাস করবেন না, তবে আপনাকে ফেরত ক্যোয়ারিতে এক্সকে কল করতে হবে

var removeQuery = FBFriendModel.remove({id : 333 });
removeQuery.exec();

6

আপনি কেবল সরিয়ে ফাংশনটির মধ্যে সরাসরি ক্যোয়ারীটি ব্যবহার করতে পারেন, সুতরাং:

FBFriendModel.remove({ id: 333}, function(err){});

6

আপনি সর্বদা অন্তর্নির্মিত ফাংশন ব্যবহার করতে পারেন:

var id = req.params.friendId; //here you pass the id
    FBFriendModel
   .findByIdAndRemove(id)
   .exec()
   .then(function(doc) {
       return doc;
    }).catch(function(error) {
       throw error;
    });

5

আপডেট: .remove()অবহেলিত তবে এটি পুরানো সংস্করণগুলির জন্য এখনও কাজ করে

YourSchema.remove({
    foo: req.params.foo
}, function(err, _) {
    if (err) return res.send(err)
    res.json({
        message: `deleted ${ req.params.foo }`
    })
});

Model.remove অবচয় করা হয়েছে
ম্যাক্সওয়েল স্ক

2

অপসারণ () পদ্ধতি ব্যবহার করে আপনি মুছে ফেলতে পারবেন।

getLogout(data){
        return this.sessionModel
        .remove({session_id: data.sid})
        .exec()
        .then(data =>{
            return "signup successfully"
        })
    }

Model.remove অবচয় করা হয়েছে
ম্যাক্সওয়েল স্ক

1
ম্যাক্সওয়েল এসসি, তারপরে একটি সম্পাদনার অনুরোধ করুন এবং সঠিক করুন। আমি জানি আপনি এসও-তে নতুন, তবে এটি অবজ্ঞাপূর্ণ বলে মন্তব্য করার চেয়ে এটি সমাধানের পক্ষে আরও কার্যকর উপায়। হতে পারে আপনি পরের বার একটি সম্পাদনা করার পরামর্শ দিতে পারেন, বা নিজেই একটি সম্পাদনা করতে পারেন, এবং পরিস্থিতিটির কিছুটা মালিকানা নিতে পারেন ...
জোশুয়া মাইকেল ওয়াগনার

1

এটি আমার পক্ষে কাজ করেছে, কেবল এটি চেষ্টা করুন:

const id = req.params.id;
      YourSchema
      .remove({_id: id})
      .exec()
      .then(result => {
        res.status(200).json({
          message: 'deleted',
          request: {
            type: 'POST',
            url: 'http://localhost:3000/yourroutes/'
          }
        })
      })
      .catch(err => {
        res.status(500).json({
          error: err
        })
      });


1

সম্যক জৈনের উত্তর অনুসারে, আমি অ্যাসিঙ্ক অ্যাওয়েট ব্যবহার করি

let isDelete = await MODEL_NAME.deleteMany({_id:'YOUR_ID', name:'YOUR_NAME'});

0

আমি এই প্যাটার্নটি সত্যই অসিঙ্কে পছন্দ করি / সক্ষম এক্সপ্রেস / মঙ্গুজ অ্যাপ্লিকেশনটির জন্য অপেক্ষা করি :

app.delete('/:idToDelete', asyncHandler(async (req, res) => {
  const deletedItem = await YourModel
    .findByIdAndDelete(req.params.idToDelete) // This method is the nice method for deleting
    .catch(err => res.status(400).send(err.message))

  res.status(200).send(deletedItem)
}))

-2
db.collection.remove(<query>,
 {
  justOne: <boolean>,
  writeConcern: <document>
})

@ এমআর: উত্তরের কোনও লিঙ্ক না থাকলে কীভাবে এটি লিঙ্ক-হতে পারে ?? এছাড়াও চেক করুন: নিম্ন মানের পোস্ট এবং কোডের উত্তরগুলি
বিডিএল

শয়তান ভুল তবে এখনও একটি নিম্ন মানের।
মিঃ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.