sql >> Databáze >  >> NoSQL >> MongoDB

TypeError:db.collection není funkce

Takže jsem hlasoval pro odpověď, která říkala, že stačí přejít na mongodb 2.2.33, protože jsem to zkusil a fungovalo to, ale pak jsem se cítil divně, když jsem jen downgradoval za účelem vyřešení problému, takže jsem našel řešení, které vám umožňuje zachovat verzi>=3.0. Pokud někdo najde tento problém a jeho problém nebyl předán prázdným odkazem, jako je přijatá odpověď, vyzkoušejte toto řešení.

Když běžíš..

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

Ve verzi mongodb>=3.0, tato database proměnná je ve skutečnosti nadřazeným objektem objektu, ke kterému se pokoušíte přistupovat pomocí database.collection('whatever') . Chcete-li získat přístup ke správnému objektu, musíte uvést název vaší databáze, pro mě to bylo provedením

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

Tím byly opraveny mé chyby při spouštění mého serveru node.js, doufám, že to pomůže někomu, kdo nechce pouze downgradovat svou verzi.

(také, pokud z nějakého důvodu neznáte název své db, stačí vytvořit console.log(database) a uvidíte to jako atribut objektu)

EDIT (červen 2018):

Podle toho zpětné volání ve skutečnosti vrací připojeného klienta databáze namísto databáze samotné.

Proto, abychom získali instanci databáze, musíme použít tuto metodu, která vyžaduje dbName . V dokumentaci bylo uvedeno If not provided, use database name from connection string. , jak uvádí @divillysausages v komentářích níže.

Stručně řečeno, měli bychom zavolat database.db().collection('theCollectionIwantToAccess'); pokud dbName poskytuje url, kde je database je ve skutečnosti client pro lepší pochopení



  1. Jedna publikace skrývá vnořená pole z jiné publikace

  2. textové vyhledávání mongodb s více poli

  3. Chyba 99 při připojování k localhost:6379. Nelze přiřadit požadovanou adresu

  4. Nelze získat připojení Jedis při použití SSL s Redis a Spring Data Redis