복붙노트

[MONGODB] db.collection MongoClient은 버전 3.0을 사용하여 함수가 아니다

MONGODB

db.collection MongoClient은 버전 3.0을 사용하여 함수가 아니다

나는 MongoDB를 가진 nodeJS에 W3Schools의 자습서를 시도하고있다.

나는 nodeJS 환경에서와 AJAX 호출로 기능있는 invoke이 예제를 실행하려고하면, 나는 오류를 아래 가지고 :

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 (NPM하여 MongoDB를 설치) 및 MongoDB의 버전에 대한 최신 MongoDB의 패키지를 설치했는지 노트 (경우에 중요한) MongoDB를 기업 3.4.4 MongoDB를 Node.js를 드라이버 v3.0.0-RC0와 함께입니다.

해결법

  1. ==============================

    1.저도 같은 일이 발생했습니다. package.json에서 "MongoDB를"로 변경하여 MongoDB 라인 : "^ 2.2.33". 당신은 NPM 제거 MongoDB가 필요합니다; 다음 NPM이 버전을 설치하기 위해 설치합니다.

    저도 같은 일이 발생했습니다. package.json에서 "MongoDB를"로 변경하여 MongoDB 라인 : "^ 2.2.33". 당신은 NPM 제거 MongoDB가 필요합니다; 다음 NPM이 버전을 설치하기 위해 설치합니다.

    이것은 나를 위해 문제를 해결. 버그가 보인다 또는 문서를 업데이트해야합니다.

  2. ==============================

    2.(이것은 "MongoDB를"가진 사람에 적용됩니다. "^ 3.0.0-RC0", 또는 최신 버전을 계속 사용하려는 package.json에서 이후 버전)

    (이것은 "MongoDB를"가진 사람에 적용됩니다. "^ 3.0.0-RC0", 또는 최신 버전을 계속 사용하려는 package.json에서 이후 버전)

    MongoDB를 기본 NodeJS 드라이버의 버전 2.x에서 당신은 연결 콜백 인수로 데이터베이스 개체를 얻을 것입니다 :

    MongoClient.connect('mongodb://localhost:27017/mytestingdb', (err, db) => {
      // Database returned
    });
    

    지금 대신 데이터베이스 개체를 포함하는 클라이언트 객체를 얻을 3.0에 대한 변경 로그에 따르면 :

    MongoClient.connect('mongodb://localhost:27017', (err, client) => {
      // Client returned
      var db = client.db('mytestingdb');
    });
    

    닫기 () 메소드는 클라이언트로 이동되었다. 질문의 코드 따라서로 번역 할 수 있습니다 :

    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. ==============================

    3.버전을 계속 사용하려는 사람들을 위해 ^ 3.0.1 당신이 MongoClient.connect () 메소드를 사용하는 방법에 대한 변경 사항을 인식. 콜백 대신 어떤에 당신이 당신이 찾고있는 DB 인스턴스를 얻기 위해 호출해야 데시벨 (DBNAME)라는 함수가 클라이언트를 반환 DB 반환하지 않습니다.

    버전을 계속 사용하려는 사람들을 위해 ^ 3.0.1 당신이 MongoClient.connect () 메소드를 사용하는 방법에 대한 변경 사항을 인식. 콜백 대신 어떤에 당신이 당신이 찾고있는 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();
    });
    
  4. ==============================

    4.

    MongoClient.connect(url (err, db) => {
        if(err) throw err;
    
        let database = db.db('databaseName');
    
        database.collection('name').find()
        .toArray((err, results) => {
            if(err) throw err;
    
            results.forEach((value)=>{
                console.log(value.name);
            });
        })
    })
    

    코드와 유일한 문제는 데이터베이스 핸들러를 들고있어 개체에 액세스하는 것입니다. 당신은 (위의 데이터베이스 변수 참조) 데이터베이스에 직접 액세스해야합니다. 이 코드는 배열에 데이터베이스를 반환 한 다음 그것을 통해 루프하고 데이터베이스에있는 모든 사람의 이름을 기록합니다.

  5. ==============================

    5.몽고 클라이언트 V3.0의에 대한 @MikkaS 대답에 돼지 백업은, 그냥 약간이로 수정 보인다 비동기 / await를 형식을 필요 :

    몽고 클라이언트 V3.0의에 대한 @MikkaS 대답에 돼지 백업은, 그냥 약간이로 수정 보인다 비동기 / 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.
    }
    
  6. ==============================

    6.나는 쉽게이 코드를 실행을 통해 그것을 해결 :

    나는 쉽게이 코드를 실행을 통해 그것을 해결 :

     npm uninstall mongodb --save
    
     npm install mongodb@2.2.33 --save
    

    코딩 해피!

  7. ==============================

    7.내가 코드를 사용 mongoclient 아래 MongoDB의 쉘 버전 v3.6.4이 나를 위해 그것의 좋은 :

    내가 코드를 사용 mongoclient 아래 MongoDB의 쉘 버전 v3.6.4이 나를 위해 그것의 좋은 :

    var MongoClient = require('mongodb').MongoClient,
    assert = require('assert');
    var url = 'mongodb://localhost:27017/video';
    MongoClient.connect(url,{ useNewUrlParser: true }, function(err, client) 
    {
    assert.equal(null, err);
    console.log("Successfully connected to server");
    var db = client.db('video');
    // Find some documents in our collection
    db.collection('movies').find({}).toArray(function(err, docs) {
    // Print the documents returned
    docs.forEach(function(doc) {
    console.log(doc.title);
    });
    // Close the DB
    client.close();
    });
    // Declare success
    console.log("Called find()");
     });
    
  8. ==============================

    8.나는 URL의 일부로 데이터베이스 이름을 유지할 수 있는지 확인하기 위해 실험을 조금했다. 나는 약속 구문을 선호하지만 여전히 콜백 구문 작동합니다. 그 client.db () 아래의주의 사항은 어떤 매개 변수를 전달하지 않고라고합니다.

    나는 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 목록 ^ 3.2.5 MongoDB를.

    당신이있는 거 기꺼이 중단 경고를 다루는 경우 'useNewUrlParser'옵션은 필요하지 않습니다. 아마도 새 드라이버가 기본이 될 것입니다 그리고 당신은 더 이상 옵션이 필요하지 않을 경우 버전 4가 나올 때까지 그러나이 시점에서 사용하는 것이 현명하다.

  9. ==============================

    9.MongoDB의 쿼리는 메모리에 저장된 배열에 커서를 반환합니다. 에 액세스 할 수 배열의가 될 것을 당신은 쿼리의 끝에서 .toArray ()를 호출해야합니다.

    MongoDB의 쿼리는 메모리에 저장된 배열에 커서를 반환합니다. 에 액세스 할 수 배열의가 될 것을 당신은 쿼리의 끝에서 .toArray ()를 호출해야합니다.

      db.collection("customers").find({}).toArray() 
    
  10. from https://stackoverflow.com/questions/47662220/db-collection-is-not-a-function-when-using-mongoclient-v3-0 by cc-by-sa and MIT license