MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

TypeError:db.collection non è una funzione

Quindi ho votato per la risposta che diceva di passare a mongodb 2.2.33 perché l'ho provato e ha funzionato, ma poi mi sono sentito strano all'idea di eseguire il downgrade per risolvere un problema, quindi ho trovato la soluzione che ti consente di mantenere la versione>=3.0. Se qualcuno trova questo problema e il suo problema non passava in un riferimento vuoto come la risposta accettata, prova questa soluzione.

Quando corri..

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

Nella versione mongodb>=3.0, quel database la variabile è in realtà l'oggetto padre dell'oggetto a cui stai tentando di accedere con database.collection('whatever') . Per accedere all'oggetto corretto, devi fare riferimento al nome del tuo database, per me è stato facendo

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

Questo ha corretto i miei errori durante l'esecuzione del mio server node.js, si spera che questo aiuti qualcuno che non vuole solo eseguire il downgrade della propria versione.

(inoltre, se non conosci il tuo nome db per qualche motivo, fai semplicemente un console.log(database) e lo vedrai come un attributo dell'oggetto)

EDIT (giugno 2018):

In base a ciò, il callback restituisce effettivamente il client connesso del database, anziché il database stesso.

Pertanto, per ottenere l'istanza del database, dobbiamo utilizzare questo metodo, che accetta un dbName . Nella documentazione diceva If not provided, use database name from connection string. , come menzionato da @divillysausages nei commenti qui sotto.

In breve, dovremmo chiamare database.db().collection('theCollectionIwantToAccess'); se il dbName è fornito dall'url, dove il database è in realtà client per una migliore comprensione