当我尝试删除集合时,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'}
答案 0 :(得分:43)
MongoError: ns not found
在对不存在的集合执行操作时发生。
例如,尝试在创建显式集合之前或在将文档添加到隐式创建集合的集合之前删除索引。
答案 1 :(得分:1)
Status(ErrorCodes::NamespaceNotFound, "ns not found");
。
除此之外,在执行任何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]);
}
}
}
};