나는 지속적으로 실행되지 않는 스크립트에서 몽구스를 사용하고 있으며 매우 간단한 문제 인 것처럼 보이지만 대답을 찾을 수 없습니다. 간단히 mongodb에 요청을 보내는 mongoose 함수를 호출하면 nodejs 인스턴스가 멈추지 않으며 Ctrl + c 또는 Program.exit ()로 수동으로 종료해야합니다.
코드는 대략 다음과 같습니다.
var mongoose = require('mongoose');
// if my program ends after this line, it shuts down as expected, my guess is that the connection is not really done here but only on the first real request ?
mongoose.connect('mongodb://localhost:27017/somedb');
// define some models
// if I include this line for example, node never stop afterwards
var MyModel = mongoose.model('MyModel', MySchema);
mongoose.disconnect ()에 호출을 추가하려고 시도했지만 결과는 없습니다. 그 외에도 모든 것이 잘 작동합니다 (찾기, 저장 등).
이것은이 사람과 똑같은 문제이며 슬프게도 아무런 대답을 얻지 못했습니다 : https://groups.google.com/group/mongoose-orm/browse_thread/thread/c72cc1c51c76e661
감사
편집 : 기술적으로 정확하기 때문에 아래 답변을 수락했지만 누군가 가이 문제를 다시 발견하면 몽구스 및 / 또는 mongodb 드라이버가 여전히 실행중인 쿼리가 있는지 물어볼 때 연결을 닫지 않는 것 같습니다.
연결 끊기 호출도 전혀 기억하지 않으며 쿼리 실행이 완료되면 기억하지 않습니다. 예외 나 다른 종류의 호출없이 호출을 버리고 실제로 연결을 닫지 않습니다.
그래서 당신은 그것을 가지고 있습니다 : 실제로 작동하려면 disconnect ()를 호출하기 전에 모든 쿼리가 처리되었는지 확인하십시오.
답변
연결을 닫을 수 있습니다
mongoose.connection.close()
답변
다른 대답은 나를 위해 작동하지 않았습니다. 이 답변에mongoose.disconnect();
명시된대로 사용해야 했습니다 .
답변
연결을 변수로 설정 한 다음 완료되면 연결을 끊을 수 있습니다.
var db = mongoose.connect('mongodb://localhost:27017/somedb');
// Do some stuff
db.disconnect();
답변
4.4.2 버전을 사용하고 있으며 다른 답변은 저에게 효과적이지 않습니다. 그러나 useMongoClient
옵션에 추가 하고 호출하는 변수에 넣는 것이 효과가있는 close
것 같습니다.
var db = mongoose.connect('mongodb://localhost:27017/somedb', { useMongoClient: true })
//do stuff
db.close()
답변
메소드 외부에서 닫거나 연결을 끊으려고하면 오류가 발생합니다. 가장 좋은 해결책은 메소드의 두 콜백에서 연결을 닫는 것입니다. 더미 코드가 여기 있습니다.
const newTodo = new Todo({text:'cook dinner'});
newTodo.save().then((docs) => {
console.log('todo saved',docs);
mongoose.connection.close();
},(e) => {
console.log('unable to save');
});
답변
Jake Wilson이 말한 것처럼 : 연결을 변수로 설정 한 다음 완료되면 연결을 끊을 수 있습니다.
let db;
mongoose.connect('mongodb://localhost:27017/somedb').then((dbConnection)=>{
db = dbConnection;
afterwards();
});
function afterwards(){
//do stuff
db.disconnect();
}
또는 비동기 기능 내부에있는 경우 :
(async ()=>{
const db = await mongoose.connect('mongodb://localhost:27017/somedb', { useMongoClient:
true })
//do stuff
db.disconnect()
})
그렇지 않으면 내 환경에서 확인했을 때 오류가 발생합니다.
답변
아마 당신은 이것을 가지고 있습니다 :
const db = mongoose.connect('mongodb://localhost:27017/db');
// Do some stuff
db.disconnect();
그러나 다음과 같은 것을 가질 수도 있습니다.
mongoose.connect('mongodb://localhost:27017/db');
const model = mongoose.model('Model', ModelSchema);
model.find().then(doc => {
console.log(doc);
}
전화를 걸 수는 없지만 db.disconnect()
사용 후 연결을 닫을 수 있습니다.
model.find().then(doc => {
console.log(doc);
}).then(() => {
mongoose.connection.close();
});