web-dev-qa-db-ja.com

Node.js Mongooseを使って文書を削除するにはどうすればいいですか?

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

上記はうまくいかないようです。記録はまだあります。

誰かが修正できますか?

260
TIMEX

繰り返したくない場合は、FBFriendModel.find({ id:333 }).remove( callback );またはFBFriendModel.find({ id:333 }).remove().exec();を試してください。

mongoose.model.findQuery を返します。これには remove関数 があります。

462
Yusuf X

更新:マングース版(5.5.3)

remove()は非推奨であり、代わりにdeleteOne()、deleteMany()、またはbulkWrite()を使用できます。

"mongoose": ">=2.7.1"の時点では、文書を見つけてそれを削除するのではなく、.remove()メソッドを使って直接文書を削除することができます。

例を参照してください。

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

アップデート:

Mongoose 3.8.1の時点で、あなたが直接文書を削除することを可能にするいくつかの方法があります。

  • remove
  • findByIdAndRemove
  • findOneAndRemove

詳しくは マングースAPIドキュメント を参照してください。

276
diosney

docsはドキュメントの配列です。そのためmongooseModel.remove()メソッドはありません。

配列内の各文書を別々に繰り返し削除することができます。

または(おそらく)一意のIDで文書を検索しているように見えるので、findOneではなくfindを使用します。

46
mtkopone

これは私にとってはバージョン3.8.1の時点で最高です。

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

そしてそれは1回のDB呼び出ししか必要としません。あなたが検索や削除に関連するremoveアクションを実行していないのなら、これを使ってください。

38
José Pinto

簡単に

FBFriendModel.remove().exec();
31
Sandro Munda

mongoose.model.find()クエリオブジェクト を返します。これにもremove()関数があります。

一意のドキュメントを1つだけ削除したい場合は、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();
28
Amol M Kulkarni

findOneに注意して削除してください!

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

上記のコードすべて削除最初ののみではなく、「Alice」という名前のユーザー。

ところで、私はこのようなドキュメントを削除することを好みます:

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

またはコールバックを提供し、exec()を省略します

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

一般化するためにあなたは使用することができます:

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
model.remove({title:'danish'}, function(err){
    if(err) throw err;
});

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

14
Danish

remove()は非推奨になりました。 deleteOne()deleteMany()またはbulkWrite()を使用してください。

私が使うコード

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

削除するオブジェクトを1つだけ探している場合は、

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

    });

この例では、Mongooseは、一致するreq.params.idに基づいて削除します。

11
bhavsac

.remove().find()のように動作します。

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

私はあなたが必要とする約束の記法を好みます。

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

ドキュメントを削除するために、私はModel.remove(conditions, [callback])を使うことを好みます

削除についてはAPIのドキュメントを参照してください: -

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

この場合、コードは次のようになります。

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

MongoDBからの応答を待たずにドキュメントを削除したい場合は、コールバックを渡さないでください。返されたクエリに対してexecを呼び出す必要があります。

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

削除関数内で直接クエリを使用することができます。

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

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;
    });
5
Doron Segal

更新:.remove()は廃止予定ですが、これは古いバージョンでも動作します

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

remove()メソッドを使うと削除できます。

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

これは私のために働いた、ちょうどこれを試してみてください:

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
MEAbid
db.collection.remove(<query>,
 {
  justOne: <boolean>,
  writeConcern: <document>
})
0
Rushabh.js