sql >> データベース >  >> NoSQL >> MongoDB

TypeError:db.collectionは関数ではありません

    それで、私はそれを試したのでmongodb 2.2.33に下がるという答えに投票しましたが、問題を修正するためにダウングレードするだけで奇妙に感じたので、バージョンを維持できる解決策を見つけました> =3.0。誰かがこの問題を見つけ、彼らの問題が受け入れられた答えのような空白の参照を渡していない場合は、この解決策を試してください。

    走るとき..

    MongoClient.connect(db.url,(err,database) =>{ }
    

    mongodbバージョン>=3.0では、そのdatabase 変数は、実際には、database.collection('whatever')を使用してアクセスしようとしているオブジェクトの親オブジェクトです。 。正しいオブジェクトにアクセスするには、データベース名を参照する必要があります。私にとっては、

    MongoClient.connect(db.url,(err,database) =>{ 
      const myAwesomeDB = database.db('myDatabaseNameAsAString')
      myAwesomeDB.collection('theCollectionIwantToAccess')
    }
    

    これにより、node.jsサーバーを実行する際のエラーが修正されました。これにより、バージョンをダウングレードしたくない人に役立つことを願っています。

    (また、何らかの理由でデータベース名がわからない場合は、console.log(database)を実行するだけで、オブジェクト属性として表示されます)

    編集(2018年6月):

    これによると、コールバックは、データベース自体ではなく、データベースの接続されたクライアントを実際に返します。

    したがって、データベースインスタンスを取得するには、このメソッドを使用する必要があります。このメソッドは、dbNameを受け取ります。 。ドキュメントには、If not provided, use database name from connection string. 、以下のコメントで@divillysausagesが言及しているように。

    つまり、database.db().collection('theCollectionIwantToAccess');を呼び出す必要があります。 dbNameがurlで提供されている場合、database 実際にはclient 理解を深めるために



    1. MongoDBロールバックから回復する方法は?

    2. jedisパイプラインで値を取得する

    3. Azureはmongodbやredisなどをサポートしていますか?

    4. MongoDB $ radionsToDegrees