반응형
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
반응형
'programing' 카테고리의 다른 글
저장 프로시저에서 여러 행을 반환하는 방법(Oracle PL/SQL) (0) | 2023.04.01 |
---|---|
프런트 엔드의 OctoberCMS Ajax 정렬 (0) | 2023.03.27 |
MongoDB에 컬렉션 명명 규칙이 있나요? (0) | 2023.03.27 |
JSONPath에서 문자열로 필터링하는 방법 (0) | 2023.03.27 |
Next.js: 문서가 정의되지 않았습니다. (0) | 2023.03.27 |