[MONGODB] 어떻게 몽구스와 데이터베이스를 제거하려면?
MONGODB어떻게 몽구스와 데이터베이스를 제거하려면?
나는 Node.js를하고 몽구스에서 데이터베이스 작성 스크립트를 준비하고 있습니다. 어떻게 몽구스를 사용하여 나는 데이터베이스가 이미 존재하는 경우 확인하고, 만약 그렇다면, 드롭 (삭제) 할 수 있습니까?
나는 몽구스와 드롭 할 수있는 방법을 찾을 수 없습니다.
해결법
-
==============================
1.몽구스에서 컬렉션을 놓기위한 방법이 없습니다, 당신이 할 수있는 최선은 하나의 콘텐츠를 제거입니다 :
몽구스에서 컬렉션을 놓기위한 방법이 없습니다, 당신이 할 수있는 최선은 하나의 콘텐츠를 제거입니다 :
Model.remove({}, function(err) { console.log('collection removed') });
그러나이 사용할 수있는 MongoDB를 기본 자바 스크립트 드라이버에 액세스 할 수있는 방법이있다
mongoose.connection.collections['collectionName'].drop( function(err) { console.log('collection dropped'); });
아무것도 잘못되는 경우에이를 시도하기 전에 백업을 만듭니다!
-
==============================
2.하나는 이미 연결에 존재하지 않는 경우 몽구스는 당신이 연결을하면 그래서, 당신은 그냥 아무것도가 있는지를 조회 할 수 있습니다, 데이터베이스를 생성합니다.
하나는 이미 연결에 존재하지 않는 경우 몽구스는 당신이 연결을하면 그래서, 당신은 그냥 아무것도가 있는지를 조회 할 수 있습니다, 데이터베이스를 생성합니다.
당신은 당신이에 연결된 모든 데이터베이스를 제거 할 수 있습니다 :
var mongoose = require('mongoose'); /* Connect to the DB */ mongoose.connect('mongodb://localhost/mydatabase',function(){ /* Drop the DB */ mongoose.connection.db.dropDatabase(); });
-
==============================
3.이 같은 hellslam의 솔루션 @ 수정하는 경우 그것은 작동합니다
이 같은 hellslam의 솔루션 @ 수정하는 경우 그것은 작동합니다
내 통합 테스트 후 데이터베이스를 제거하기 위해이 기술을 사용
//CoffeeScript mongoose = require "mongoose" conn = mongoose.connect("mongodb://localhost/mydb") conn.connection.db.dropDatabase() //JavaScript var conn, mongoose; mongoose = require("mongoose"); conn = mongoose.connect("mongodb://localhost/mydb"); conn.connection.db.dropDatabase();
내가 공유하기로 결정 그래서 HTH는 적어도 그것은) = 나를 위해 한
-
==============================
4.hellslam의 @와 silverfighter의 답변 @ 시도. 나는 다시 내 테스트를 들고 경쟁 조건을 발견했다. 내 경우에는 내가 모카 테스트를 실행하고있어 시험의 전 기능에 나는 전체 DB를 삭제합니다. 여기에 나를 위해 작동거야.
hellslam의 @와 silverfighter의 답변 @ 시도. 나는 다시 내 테스트를 들고 경쟁 조건을 발견했다. 내 경우에는 내가 모카 테스트를 실행하고있어 시험의 전 기능에 나는 전체 DB를 삭제합니다. 여기에 나를 위해 작동거야.
var con = mongoose.connect('mongodb://localhost/mydatabase'); mongoose.connection.on('open', function(){ con.connection.db.dropDatabase(function(err, result){ done(); }); });
당신이 읽을 수있는 더 https://github.com/Automattic/mongoose/issues/1469
-
==============================
5.내가 다른 솔루션을 했어 어려움은 그들이 당신이 다시 작동 인덱스를 얻으려면 응용 프로그램을 다시 시작에 의존하고있다.
내가 다른 솔루션을 했어 어려움은 그들이 당신이 다시 작동 인덱스를 얻으려면 응용 프로그램을 다시 시작에 의존하고있다.
내 요구 (즉 핵무기 모든 컬렉션은, 그들의 인덱스를 함께 재현 단위 테스트를 실행할 수있는)의 경우,이 솔루션을 구현 결국 :
당신이 라이브러리에있어하지만 난 개발자를위한 연습기로 떠날 경우가 parellel의 인덱스를 조립하기 위해 underscore.js 및 async.js 라이브러리에 의존, 그것은 풀린 수 있습니다.
mongoose.connection.db.executeDbCommand( {dropDatabase:1}, function(err, result) { var mongoPath = mongoose.connections[0].host + ':' + mongoose.connections[0].port + '/' + mongoose.connections[0].name //Kill the current connection, then re-establish it mongoose.connection.close() mongoose.connect('mongodb://' + mongoPath, function(err){ var asyncFunctions = [] //Loop through all the known schemas, and execute an ensureIndex to make sure we're clean _.each(mongoose.connections[0].base.modelSchemas, function(schema, key) { asyncFunctions.push(function(cb){ mongoose.model(key, schema).ensureIndexes(function(){ return cb() }) }) }) async.parallel(asyncFunctions, function(err) { console.log('Done dumping all collections and recreating indexes') }) }) })
-
==============================
6.업데이트 된 대답 4.6.0+를 들어, 당신이 약속 (문서 참조)에 대한 선호가있는 경우 :
업데이트 된 대답 4.6.0+를 들어, 당신이 약속 (문서 참조)에 대한 선호가있는 경우 :
mongoose.connect('mongodb://localhost/mydb', { useMongoClient: true }) .then((connection) => { connection.db.dropDatabase(); // alternatively: // mongoose.connection.db.dropDatabase(); });
나는 몽구스 4.13.6를 사용하여 내 자신의 코드에이 코드를 테스트했다. 또한, useMongoClient 옵션의 사용을주의 (문서 참조). 문서를 나타냅니다
-
==============================
7.데이터베이스의 특정 모음을 비우려면 :
데이터베이스의 특정 모음을 비우려면 :
model.remove(function(err, p){ if(err){ throw err; } else{ console.log('No Of Documents deleted:' + p); } });
노트 :
-
==============================
8.이 몽구스의 v4.7.0의 나를 위해 작동합니다 :
이 몽구스의 v4.7.0의 나를 위해 작동합니다 :
mongoose.connection.dropDatabase();
-
==============================
9.몽구스에서 데이터베이스를 제거하는 가장 좋은 방법은 사용중인 몽구스의 버전에 따라 달라집니다. 당신은 4.6.4 이상이, 그 릴리스에 추가이 방법은 가능성이 당신을 위해 잘 작동에가는 것을 몽구스의 버전을 사용하는 경우 :
몽구스에서 데이터베이스를 제거하는 가장 좋은 방법은 사용중인 몽구스의 버전에 따라 달라집니다. 당신은 4.6.4 이상이, 그 릴리스에 추가이 방법은 가능성이 당신을 위해 잘 작동에가는 것을 몽구스의 버전을 사용하는 경우 :
mongoose.connection.dropDatabase();
이전 릴리스에서이 방법은 존재하지 않았다. 대신, 직접 MongoDB를 호출을 사용했다 :
mongoose.connection.db.dropDatabase();
이 데이터베이스 연결이 생성 된 직후에 실행 된 경우, 그것은 가능성이 자동으로 실패 할 수 있습니다. 이것은 실제로 명령이 발생했을 때 아직 설정되지 비동기가 아닌 수의 연결 관계가있다. 이것은 일반적으로 연결이 열린 다음 실행 때까지 큐 .find ()와 같은 다른 몽구스 통화에 대한 문제가되지 않습니다.
당신이 추가 된 dropDatabase () 바로 가기에 대한 소스 코드를 보면, 당신은이 정확한 문제를 해결하기 위해 설계되었다 볼 수 있습니다. 그것은 연결이 열려 있고 준비가되어 있는지 확인합니다. 그렇다면, 즉시 명령을 발생합니다. 그렇지 않은 경우 데이터베이스 연결을 열 때 실행할 명령을 등록합니다.
제안 중 일부는 위의 오픈 핸들러에 dropDatabase 명령을 넣어 항상 좋습니다. 연결이 아직 열려 있지 않은 경우 그러나 그것은 단지의 경우에 작동합니다.
Connection.prototype.dropDatabase = function(callback) { var Promise = PromiseProvider.get(); var _this = this; var promise = new Promise.ES6(function(resolve, reject) { if (_this.readyState !== STATES.connected) { _this.on('open', function() { _this.db.dropDatabase(function(error) { if (error) { reject(error); } else { resolve(); } }); }); } else { _this.db.dropDatabase(function(error) { if (error) { reject(error); } else { resolve(); } }); } }); if (callback) { promise.then(function() { callback(); }, callback); } return promise; };
여기에 이전 몽구스 버전과 함께 사용할 수있는 위의 논리의 간단한 버전입니다 :
// This shim is backported from Mongoose 4.6.4 to reliably drop a database // http://stackoverflow.com/a/42860208/254318 // The first arg should be "mongoose.connection" function dropDatabase (connection, callback) { // readyState 1 === 'connected' if (connection.readyState !== 1) { connection.on('open', function() { connection.db.dropDatabase(callback); }); } else { connection.db.dropDatabase(callback); } }
-
==============================
10.4.6.0+를 몽구스 :
4.6.0+를 몽구스 :
mongoose.connect('mongodb://localhost/mydb') mongoose.connection.once('connected', () => { mongoose.connection.db.dropDatabase(); });
콜백을 전달하면 더 이상 작동하지 않습니다 연결합니다 :
형식 오류 : 널 (null)의 특성 'commandsTakeWriteConcern'읽을 수 없습니다
-
==============================
11.
beforeEach((done) => { mongoose.connection.dropCollection('products',(error ,result) => { if (error) { console.log('Products Collection is not dropped') } else { console.log(result) } done() }) })
-
==============================
12.모음에있는 모든 문서를 삭제의 경우 :
모음에있는 모든 문서를 삭제의 경우 :
myMongooseModel.collection.drop();
시험에서 본
from https://stackoverflow.com/questions/10081452/how-to-drop-a-database-with-mongoose by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 어떻게 다른 시간대에 년 - 월 - 일까지 집계합니다 (0) | 2019.12.09 |
---|---|
[MONGODB] MongoDB를하고 Nodejs으로 삽입 및 쿼리 날짜 (0) | 2019.12.09 |
[MONGODB] Node.js를의 동기 MongoDB의 쿼리를 만들 수있는 올바른 방법은 무엇입니까? (0) | 2019.12.09 |
[MONGODB] MongoDB의에 포함 된 문서를 필터링 (0) | 2019.12.09 |
[MONGODB] 어레이의 길이만큼 몽고 오더 (0) | 2019.12.09 |