programing

MongoError: 컬렉션을 삭제하려고 하면 ns를 찾을 수 없습니다.

batch 2023. 3. 27. 21:08
반응형

MongoError: 컬렉션을 삭제하려고 하면 ns를 찾을 수 없습니다.

컬렉션을 드롭하려고 하면 MongoError: ns not found(MongoError: ns not found)라는 오류가 발생합니다.

내 mongoose 코드는 다음과 같습니다.

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

})

오류:

err { [Mongo Error: ns를 찾을 수 없습니다]
이름: 'MongoError',
메시지: 'ns not found',
OK: 0,
errmsg: 'ns를 찾을 수 없습니다' }

MongoError: ns not found존재하지 않는 컬렉션에 대해 작업을 수행할 때 발생합니다.

예를 들어 명시적인 컬렉션을 작성하기 전에 또는 컬렉션을 암묵적으로 작성하는 문서를 컬렉션에 추가하기 전에 인덱스를 삭제하려고 시도하는 경우입니다.

Status(ErrorCodes::NamespaceNotFound, "ns not found");존재하지 않는 컬렉션, 뷰 또는 인덱스를 삭제하려고 하면 느려집니다.

예를 들어 다음과 같습니다.

그 외에는 CRUD 작업을 수행하기 전에 수집이 이미 존재하는지 여부를 명시적으로 확인할 필요가 없습니다.

이것은 드롭 수집 오류를 피하기 위한 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]);
            }
        }
    }
};

이렇게 해서 컬렉션이 존재하는지 확인한 후 드롭을 시도합니다.

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

언급URL : https://stackoverflow.com/questions/37136204/mongoerror-ns-not-found-when-try-to-drop-collection

반응형