javascript - كيف أقوم بإزالة المستندات باستخدام Node.js Mongoose؟




mongodb express authentication (16)

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

ما سبق لا يبدو للعمل. السجلات لا تزال هناك.

يمكن للشخص إصلاح؟


Answers

أنا أفضل رمز الوعد ، حيث تحتاج على سبيل المثال

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

كن حذرا مع findOne وإزالة!

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

يزيل الكود أعلاه جميع المستخدمين المسمى "أليس" بدلاً من الأول فقط.

بالمناسبة ، أفضل إزالة مستندات مثل هذه:

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

أو قم بتوفير الاستدعاء وقم بحذف exec ()

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

ترجع 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();

اعتبارًا من "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

ارجع إلى مستندات واجهة برمجة تطبيقات النمس للحصول على مزيد من المعلومات.


يمكنك فقط استخدام الاستعلام مباشرة داخل وظيفة الإزالة ، لذلك:

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

يمكنك دائمًا استخدام الدالة Mongoose المدمجة:

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

للتعميم ، يمكنك استخدام:

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
});

كان يعمل بالنسبة لي مجرد محاولة هذا وإخوانه

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
        })
      });

يعمل لأي إصدار النمس استخدمته

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

docs عبارة عن مجموعة من المستندات. لذلك ليس لديها طريقة mongooseModel.remove() .

يمكنك تكرار كل مستند في الصفيف وإزالته بشكل منفصل.

أو - نظرًا لأنه يبدو أنك تبحث عن المستندات من خلال معرف فريد (ربما) - استخدم findOne بدلاً من find .


إذا كنت لا تشعر بالتكرار ، فجرّب FBFriendModel.find({ id:333 }).remove( callback ); أو FBFriendModel.find({ id:333 }).remove().exec();

ترجع mongoose.model.find Query يحتوي على وظيفة remove .


باستخدام طريقة remove () التي يمكنك إزالتها.

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

هذا بالنسبة لي هو الأفضل من الإصدار 3.8.1:

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

ويتطلب مكالمة DB واحدة فقط. استخدم هذا مع العلم أنك لا تقوم بأي إجراءات remove pior إلى البحث والإزالة.



يعمل .find() مثل .find() :

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

تكمن المشكلة في التعليمة البرمجية في أن جافا سكريبت حساس لحالة الأحرف. استدعاء الأسلوب الخاص بك

indexof()

يجب أن يكون في الواقع

indexOf()

جرّب إصلاحه ومعرفة ما إذا كان ذلك يساعد على:

if (test.indexOf("title") !=-1) {
    alert(elm);
    foundLinks++;
}




javascript node.js mongodb express authentication