MongoDB를 사용하여 nodeJS에서 W3schools 자습서 를 시도 했습니다 .
nodeJS 환경 에서이 예제를 구현하고 AJAX 호출로 함수를 호출하려고하면 아래 오류가 발생합니다.
TypeError: db.collection is not a function
at c:\Users\user\Desktop\Web Project\WebService.JS:79:14
at args.push (c:\Users\user\node_modules\mongodb\lib\utils.js:431:72)
at c:\Users\user\node_modules\mongodb\lib\mongo_client.js:254:5
at connectCallback (c:\Users\user\node_modules\mongodb\lib\mongo_client.js:933:5)
at c:\Users\user\node_modules\mongodb\lib\mongo_client.js:794:11
at _combinedTickCallback (internal/process/next_tick.js:73:7)
at process._tickCallback (internal/process/next_tick.js:104:9)
구현 된 코드를 아래에서 찾으십시오.
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/mytestingdb";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
db.collection("customers").findOne({}, function(err, result) {
if (err) throw err;
console.log(result.name);
db.close();
});
});
실행이 발생할 때마다 오류가 발생합니다.
db.collection("customers").findOne({}, function(err, result) {}
또한 노드 JS 용 최신 MongoDB 패키지 ( npm install mongodb )를 설치 했으며 MongoDB 버전은 MongoDB Enterprise 3.4.4이며 MongoDB Node.js 드라이버 v3.0.0-rc0입니다.
답변
나는 같은 것을 만났다. package.json에서 mongodb 행을 “mongodb”: “^ 2.2.33″으로 변경하십시오. mongodb를 npm 제거해야합니다. 그런 다음 npm install로이 버전을 설치하십시오.
이것은 나를 위해 문제를 해결했습니다. 버그 인 것 같거나 문서를 업데이트해야합니다.
답변
MongoDB 원시 NodeJS 드라이버 버전 3.0 사용자 :
( “mongodb”: “^ 3.0.0-rc0″또는 package.json의 최신 버전 인 최신 버전을 계속 사용하려는 사용자에게 적용됩니다.)
MongoDB 원시 NodeJS 드라이버 버전 2.x에서는 데이터베이스 오브젝트를 연결 콜백에 대한 인수로 가져옵니다.
MongoClient.connect('mongodb://localhost:27017/mytestingdb', (err, db) => {
// Database returned
});
3.0 에 대한 changelog 에 따르면 이제 데이터베이스 오브젝트를 포함하는 클라이언트 오브젝트를 얻게됩니다.
MongoClient.connect('mongodb://localhost:27017', (err, client) => {
// Client returned
var db = client.db('mytestingdb');
});
이 close()
방법은 또한 클라이언트로 이동되었습니다. 따라서 문제의 코드는 다음과 같이 번역 될 수 있습니다.
MongoClient.connect('mongodb://localhost', function (err, client) {
if (err) throw err;
var db = client.db('mytestingdb');
db.collection('customers').findOne({}, function (findErr, result) {
if (findErr) throw findErr;
console.log(result.name);
client.close();
});
});
답변
^ 3.0.1 버전을 계속 사용하려는 경우 MongoClient.connect()
메소드 사용 방법의 변경 사항을 알고 있어야합니다 . 콜백은 db
대신 반환하지 않습니다. client
이 함수 에는 찾고자 db(dbname)
하는 db
인스턴스 를 얻기 위해 호출해야하는 함수 가 있습니다 .
const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');
// Connection URL
const url = 'mongodb://localhost:27017';
// Database Name
const dbName = 'myproject';
// Use connect method to connect to the server
MongoClient.connect(url, function(err, client) {
assert.equal(null, err);
console.log("Connected successfully to server");
const db = client.db(dbName);
client.close();
});
답변
MongoClient.connect(url (err, client) => {
if(err) throw err;
let database = client.db('databaseName');
database.collection('name').find()
.toArray((err, results) => {
if(err) throw err;
results.forEach((value)=>{
console.log(value.name);
});
})
})
코드의 유일한 문제점은 데이터베이스 핸들러를 보유하고있는 오브젝트에 액세스한다는 것입니다. 데이터베이스에 직접 액세스해야합니다 (위의 데이터베이스 변수 참조). 이 코드는 데이터베이스를 배열로 반환 한 다음 반복하여 데이터베이스에있는 모든 사람의 이름을 기록합니다.
답변
Mongo Client v3.x에 대한 @MikkaS 답변에 대한 돼지 뒷받침, async / await 형식이 필요했습니다.이 형식은 다음과 같이 약간 수정되었습니다.
const myFunc = async () => {
// Prepping here...
// Connect
let client = await MongoClient.connect('mongodb://localhost');
let db = await client.db();
// Run the query
let cursor = await db.collection('customers').find({});
// Do whatever you want on the result.
}
답변
데이터베이스 이름을 URL의 일부로 유지할 수 있는지 확인하기 위해 약간의 실험을 수행했습니다. 나는 약속 구문을 선호하지만 여전히 콜백 구문에서 작동해야합니다. client.db ()는 매개 변수를 전달하지 않고 호출됩니다.
MongoClient.connect(
'mongodb://localhost:27017/mytestingdb',
{ useNewUrlParser: true}
)
.then(client => {
// The database name is part of the url. client.db() seems
// to know that and works even without a parameter that
// relays the db name.
let db = client.db();
console.log('the current database is: ' + db.s.databaseName);
// client.close() if you want to
})
.catch(err => console.log(err));
내 package.json은 monbodb ^ 3.2.5를 나열합니다.
지원 중단 경고를 처리하려는 경우 ‘useNewUrlParser’옵션이 필요하지 않습니다. 그러나이 시점에서 새 드라이버가 기본값이되고 더 이상 옵션이 필요하지 않은 버전 4가 나올 때까지 사용하는 것이 좋습니다.
답변
이 코드를 실행하여 쉽게 해결했습니다.
npm uninstall mongodb --save
npm install mongodb@2.2.33 --save
행복한 코딩!