MongoError:尝试删除集合时未找到 ns

Posted

技术标签:

【中文标题】MongoError:尝试删除集合时未找到 ns【英文标题】:MongoError: ns not found when try to drop collection 【发布时间】:2016-09-05 07:04:08 【问题描述】:

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

这是我的猫鼬代码:

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 没找到', 好的:0, errmsg: 'ns 未找到'

【问题讨论】:

你没有连接到数据库(使用mongoose.connect())。 mongoose 没有 drop 收集方法。 chekout this 回答以获取更多信息。 是的,我用过 mongoose.connect()。 @robertklep @RajeshDhiman,mongoose.connection.db.dropCollection 方法已经使用,***.com/questions/11453617/… 【参考方案1】:

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

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

【讨论】:

所以在这种情况下,您不能删除一开始就不存在的集合。 ns 可能是命名空间? ?? github.com/mongodb/mongo/blob/… Mongo, Inc. 的谁认为 "ns not found" was a useful error?! 谢谢大家,在丢弃之前做了检查并用 IF 包装,解决了问题。应用正在运行。【参考方案2】:

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

例如:_dropCollection

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

【讨论】:

【参考方案3】:

这是我的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]);
            
        
    
;

【讨论】:

以上是关于MongoError:尝试删除集合时未找到 ns的主要内容,如果未能解决你的问题,请参考以下文章

尝试与集合关系聚合时出现 MongoError

mongodb集合被误删了,可以恢复吗

执行删除规则时未调用自定义对多关系访问器方法

我该如何修复(节点:14352)UnhandledPromiseRejectionWarning:MongoError:E11000 重复键错误集合:错误?

MongoError:E11000 重复键错误集合:annka.transactions 索引:assets_1 重复键::null

MongoError:E11000 重复键错误集合:myFirstDatabase.tours 索引:rating_1 重复键: rating:null