javascript - 遍历所有集合并删除它们

标签 javascript node.js mongodb mongoose

我有这个代码:

exports.cleanDB = function() {
  return mongoose.connection.db.dropDatabase();
};

既然那是弊端,我想遍历所有的集合,想调用

mongoose.connection.db.DateTime.remove();

在每一个上。

有人可以帮我创建带有返回语句的代码吗?

在应用程序的另一部分,我不知道如何重写类似的代码:

  exports.cleanDB = function*(req) {

    yield mongoose.connection.db.dropDatabase();

最佳答案

真的看不出删除数据库有什么问题。但是如果你真的必须那么你可以循环注册的模型并执行 .remove()

例如:

// Just similating an async wrapper
(async function() { 

  try {

    const conn = await mongoose.connect(uri,options);

    // Loop all registered models
    await Promise.all(
      Object.entries(conn.models).map(([k,m]) => m.remove())
    )

  } catch(e) {
    console.error(e)
  }

})()

或者简单的 promise :

mongoose.connect(uri,options).then( conn => {

  Promise.all(
    Object.entries(conn.models).map(([k,m]) => m.remove())
  ).then( () => /* something */ )

})

你甚至可以做 Object.keys如果您不支持 Object.entries()

mongoose.connect(uri,options).then( conn => {

  Promise.all(
    Object.keys(conn.models).map(k => conn.models[k].remove())
  ).then( () => /* something */ )

})

或者,如果你真的必须这样做,那么深入到数据库级别并使用 .collections() 删除所有集合。来自 Db

的方法
(async function() { 

  try {

    const conn = await mongoose.connect(uri,options);

    // Get every collection in an array
    await Promise.all(
      (await conn.db.collections()).map( c => c.remove() )
    );

  } catch(e) {
    console.error(e)
  }

})()

或者简单的 promise :

mongoose.connect(uri,options).then( conn => {

  conn.db.collections()
    .then( collections => Promise.all( 
      collections.map( c => c.remove() )
    )
    .then( () => /* something */ )

})

模型注册与否都没有关系。

所以这实际上取决于您更愿意采用哪种方法,如果您已经拥有应该处理以加载和注册每个模型的代码,那么使用已注册的模型应该就足够了。否则,使用直接驱动程序方法获取对数据库中当前所有集合的引用可确保即使模型尚未注册,它的集合仍会删除所有内容。

请注意 Db.collections()基本上是 Db.listCollections() 输出的包装版本这实际上是返回 Collection对象而不仅仅是“名称”。

关于javascript - 遍历所有集合并删除它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46846858/

相关文章:

javascript - iOS:这家伙用什么样的工具来制作这个演示的原型(prototype)?

javascript - 你能用 Jasmine 测试嵌入在 HTML 页面中的 JavaScript/JQuery 代码吗?

node.js - Sequelize - 运行同步正在构建多个版本的表,这些表具有不同的 FK 文件名和不同版本中的初始化值

node.js - 根据id更新数组对象?

mongodb - 如何在 Meteor 服务器端做 mongo 组

javascript - 将 % 放在数字后的格式字符串

javascript - 如何绕过 RequireJS 加载全局模块?

javascript - 异步等待中的 try catch 问题

javascript - Angular 页面刷新中发生了什么为什么我的登录用户无法识别

MongoDB:如何根据日期间隔和匹配间隔中所有日期的更多条件进行查询