试图删除集合时找不到 ns

当我尝试删除集合时,猫鼬抛出一个错误,即“ 未找到 ns”。

这是我的猫鼬密码:

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


})

错误:

Err {[ MongoError: ns not found ]
姓名: ‘ MongoError’,
留言: ‘ ns 没有找到,
好的,
Rmsg: ‘ ns not found’}

58290 次浏览

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

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

这是我的 mongodb 连接接口,以避免丢弃收集错误:

'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]);
}
}
}
};

当您尝试删除不存在的集合、视图或索引时,将引发 Status(ErrorCodes::NamespaceNotFound, "ns not found");

例如: _dropCollection

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

这是我在尝试删除之前检查集合是否存在的方法。

if (db.listCollections().toArray().includes(collection)) {
await db.collection(collection).drop();
}