MongoError:尝试删除集合

时间:2016-05-10 10:44:14

标签: node.js mongodb mongoose

当我尝试删除集合时,Mongoose会抛出一个错误,即“ MongoError:ns not found ”。

这是我的猫鼬代码:

var mongoose = require('bluebird').promisifyAll(require('mongoose'));
......
......
......   
mongoose.connection.db.dropCollection("myCollection",function(err,affect){
   console.log('err',err);

})

错误:

  

错误{[MongoError:ns not found]
  名称:'MongoError',
   消息:'ns   找不到',
  好的:0,
  errmsg:'ns not found'}

3 个答案:

答案 0 :(得分:43)

MongoError: ns not found在对不存在的集合执行操作时发生。

例如,尝试在创建显式集合之前或在将文档添加到隐式创建集合的集合之前删除索引。

答案 1 :(得分:1)

尝试删除不存在的集合,视图或索引时,会抛出

Status(ErrorCodes::NamespaceNotFound, "ns not found");

例如:_dropCollection

除此之外,在执行任何CRUD操作之前,无需显式检查集合是否已存在。

答案 2 :(得分:0)

这是我的mongodb连接界面,以避免发生drop collection错误:

'use strict';

module.exports = class {
    static async connect() {
        this.mongoose = require('mongoose');

        await this.mongoose.connect(process.env.MONGODB_DSN, {
            useNewUrlParser: true,
            reconnectTries: Number.MAX_VALUE,
            reconnectInterval: 5000,
            useFindAndModify: false
        }).catch(err => {
            console.error('Database connection error: ' + err.message);
        });

        this.db = this.mongoose.connection.db;

        return this.db;
    }

    static async dropCollection(list) {
        if (list.constructor.name !== 'Array') {
            list = [list];
        }

        const collections = (await this.db.listCollections().toArray()).map(collection => collection.name);

        for (let i = 0; i < list.length; i++) {
            if (collections.indexOf(list[i]) !== -1) {
                await this.db.dropCollection(list[i]);
            }
        }
    }
};