68

mongoose.jsを使用してコレクションまたはデータベース全体を削除することは可能ですか?

4

7 に答える 7

98

はい。ただし、Mongoose自体ではなく、ネイティブのMongoDBドライバーを介して実行します。必須の接続されたmongoose変数を想定すると、ネイティブDbオブジェクトは、を介してアクセス可能mongoose.connection.dbであり、そのオブジェクトはメソッドを提供dropCollectiondropDatabaseます。

// Drop the 'foo' collection from the current database
mongoose.connection.db.dropCollection('foo', function(err, result) {...});

// Drop the current database
mongoose.connection.db.dropDatabase(function(err, result) {...});
于 2012-07-15T15:51:51.010 に答える
91

これはマングースで実行できるようになりました。

MyModel.collection.drop();

帽子のヒント:https ://github.com/Automattic/mongoose/issues/4511

于 2017-01-28T06:21:00.997 に答える
10

mochajsテストフレームワークを使用していて、各テストの後にすべてのdbコレクションをクリーンアップしたい場合は、async/awaitを使用する以下を使用できます。

afterEach(async function () {
  const collections = await mongoose.connection.db.collections()

  for (let collection of collections) {
    await collection.remove()
  }
})
于 2018-04-28T01:28:28.053 に答える
3

マングースはすべてのモデルの接続を参照します。そのため、個々のモデルからDBまたはコレクションを削除することも役立つ場合があります。

例えば:

// Drop the 'foo' collection from the current database
User.db.dropCollection('foo', function(err, result) {...});

// Drop the current database
User.db.dropDatabase(function(err, result) {...});
于 2015-10-20T21:58:47.340 に答える
2

5.2.15バージョンのMongoose+Mochaテストでは、各テストの前にすべてのコレクションを削除する必要があります。

beforeEach(async () => {
     const collections = await mongoose.connection.db.collections();

     for (let collection of collections) {
          // note: collection.remove() has been depreceated.        
          await collection.deleteOne(); 
     }
});
于 2018-09-16T07:53:44.260 に答える
1

dockerテストとテストがコンテナで実行された後にコレクションを削除する場合:

mongoose = require("mongoose");
...
afterAll(async () => {
  const url = 'mongodb://host.docker.internal:27017/my-base-name';
  await mongoose.connect(url)
  await mongoose.connection.collection('collection-name').drop()
})
于 2019-07-19T14:53:23.430 に答える
0

Connection.prototype.dropCollection()を使用してコレクションを削除しました

const conn = mongoose.createConnection('mongodb://localhost:27017/mydb');
conn.dropCollection("Collection_name",callbacks);
于 2021-09-29T12:16:07.043 に答える