12

マングースモデルのremove-methodが本当に何かを削除したかどうかを確認するにはどうすればよいですか?

MyModel.remove({_id: myId}, function(err, entry) {
  if(entry == null) next(new Error("ID was not found."));    // this doesn't work
}

削除されたドキュメントの数を確認できますか?

Mongo-Documentation kristina1にコメントを書き込んでください:

削除後にdb.runCommand({getLastError:1})を呼び出すと、「n」フィールドに削除されたドキュメントの数が表示されます。

しかし、私はマングースでこれを行う方法がわかりません。

4

3 に答える 3

32

マングース<4、MongoDB <3

コールバックの2番目のパラメーターremoveは、削除されたドキュメントの数を含む数値です。

MyModel.remove({_id: myId}, function(err, numberRemoved) {
  if(numberRemoved === 0) next(new Error("ID was not found."));
}

Mongoose 4.x、MongoDB 3.x

コールバックに渡される2番目のパラメーターは、削除されたドキュメントの数を示すフィールドをremove持つオブジェクトになりました。result.n

MyModel.remove({_id: myId}, function(err, obj) {
  if(obj.result.n === 0) next(new Error("ID was not found."));
}
于 2012-08-17T14:00:39.273 に答える
2

最新バージョンのマングースでこれを試しましたが、機能しませんでした。2番目のパラメーターは、カウントだけでなく、操作結果として返されます。以下のように使用され、それは機能しました:

 Model.remove({
            myId: req.myId
        }, function(err, removeResult) {
            if (err) {
                console.log(err);
            }
            if (removeResult.result.n == 0) {
                console.log("Record not found");
            }
            Console.log("Deleted successfully.");
        });
于 2015-09-17T00:41:43.453 に答える
0

私は2020年にこれに遭遇し、Mongoose 5.9.28で、結果に結果ラッパーが不要であることがわかりました。そのため、removeを使用して、非同期メソッドで削除されたレコードの数を取得すると、次のようになります。

async function remove(query) {
  const result = await ItemModel.remove(query);
  return result.n;
}

もちろん、collection.removeは廃止され、deleteOneまたはdeleteManyが採用されているため、これも試してください。

于 2020-08-11T00:28:06.387 に答える