Node.js/MongoDB,删除整个集合

11

我正在尝试移除集合中的所有项。

db.collection('sessions', function(err, collection) {                                      
    collection.remove();                 
});

我遇到的错误是:

node.js:134
        throw e; // process.nextTick error, or 'error' event on first tick
        ^
TypeError: Cannot call method 'getRequestId' of null
    at [object Object].executeCommand (/srv/www/www.cidev.com/nodejs/node_modules/mongodb/lib/mongodb/db.js:778:48)
    at Collection.remove (/srv/www/www.cidev.com/nodejs/node_modules/mongodb/lib/mongodb/collection.js:199:26)
    at /srv/www/www.cidev.com/nodejs/session/memory/index.js:15:20
    at [object Object].collection (/srv/www/www.cidev.com/nodejs/node_modules/mongodb/lib/mongodb/db.js:197:12)
    at new <anonymous> (/srv/www/www.cidev.com/nodejs/session/memory/index.js:14:11)
    at Object.<anonymous> (/srv/www/www.cidev.com/nodejs/session/memory/index.js:157:16)
    at Module._compile (module.js:411:26)
    at Object..js (module.js:417:10)
    at Module.load (module.js:343:31)
    at Function._load (module.js:302:12)

然而,我可以通过mongodb很好地实现这一点:

db.sessions.remove();

通过node实现我想要的最佳方法是什么?

谢谢

4个回答

16

回到这个问题...只是为了更新问题。

store.collection('sessions',function(err, collection){
    collection.remove({},function(err, removed){
    });
});

存储是数据库对象。 - dyesdyes
该方法现已弃用 https://mongodb.github.io/node-mongodb-native/3.3/api/Collection.html#remove 最好使用此处的答案 https://dev59.com/G2sz5IYBdhLWcg3wOVP5#39977526 - Gonzalo.-

11

我知道这有点晚了,并且已经发生了很多变化,但是在node中删除一个集合,你可以这样做:

db.collection('someCollection').drop();

您可以在Mongo终端执行以下操作:

db.someCollection.drop();

就是这么简单。


如果您想要清除整个集合而不删除它,该怎么办?即保留索引。 - eran otzap

2
提供一个更近期的答案,基于 API 的变化并尝试之前的答案。
以下示例代表了我们在集成测试中使用的代码块:
const mongoUrl = 'mongodb://localhost:27017/test-database';
const mongoClient = await MongoClient.connect(mongoUrl, {
  useNewUrlParser: true,
  useUnifiedTopology: true
});

const database = mongoClient.db();
if (database) {
  const collections = await database.listCollections();
  await collections.forEach(async collection => {
    console.log(`Dropping ${collection.name}`);
    await database.collection(collection.name).drop();
  });
}

请注意,如果您没有对数据库的完全权限(例如在Mongo Cloud中),则以下方法将失败:
await database.dropDatabase();

为了更好的理解,我使用了 mongodb 包 3.5.9 和 node 14.15.1。


这就是方法。 - Z. Bagley
这将删除数据库,但不会删除任何集合。 - Timo

0

我不确定你是否能够解决这个问题,但是你的代码对我来说没有起作用...也许是因为API发生了变化?无论如何,我使用以下代码成功地删除了整个集合的内容:

db.CollectionName.remove().exec(function(error) {
    if(error) {
        console.log('Uh oh: ' + error);
    }
    else {
        console.log('    [Existing Collection Deleted]');
    }
 });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接