Eu tenho tentado o tutorial do W3schools no nodeJS com o MongoDB.
Quando tento implementar este exemplo em um ambiente nodeJS e invoco a função com uma chamada AJAX, obtive o erro abaixo:
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)
Por favor, encontre abaixo meu código implementado:
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();
});
});
Observe que o erro ocorre sempre que a execução ocorre:
db.collection("customers").findOne({}, function(err, result) {}
Além disso, observe (caso isso importe) que eu instalei o pacote MongoDB mais recente para o nó JS ( npm install mongodb ) e a versão do MongoDB é o MongoDB Enterprise 3.4.4, com o driver MongoDB Node.js v3.0.0-rc0.
db.collection()...
um log do console para ver se ele chega lá, sem problemas.Respostas:
Eu encontrei a mesma coisa. No package.json, altere a linha do mongodb para "mongodb": "^ 2.2.33". Você precisará npm desinstalar o mongodb; em seguida, npm install para instalar esta versão.
Isso resolveu o problema para mim. Parece ser um bug ou os documentos precisam ser atualizados.
fonte
Para pessoas na versão 3.0 do driver NodeJS nativo do MongoDB:
(Isso é aplicável a pessoas com "mongodb": "^ 3.0.0-rc0" ou uma versão posterior no package.json, que desejam continuar usando a versão mais recente.)
Na versão 2.x do driver NodeJS nativo do MongoDB, você obteria o objeto de banco de dados como argumento para o retorno de chamada de conexão:
De acordo com o changelog for 3.0, agora você obtém um objeto cliente que contém o objeto de banco de dados:
O
close()
método também foi movido para o cliente. O código na pergunta pode, portanto, ser traduzido para:fonte
var db = client.db('mytestingdb');
linha extra ( ) a cada vez, em vez de apenas escrever assim (MongoClient.connect('mongodb://localhost:27017/mytestingdb')
)? Estou sempre trabalhando com o mesmo banco de dados. Existe alguma abordagem para eliminar essa linha extra? É como uma coisa demorada para mim.Para aqueles que desejam continuar usando a versão ^ 3.0.1, esteja ciente das mudanças em como você usa o
MongoClient.connect()
método. O retorno de chamada nãodb
retornaclient
, mas retorna , contra o qual existe uma função chamadadb(dbname)
que você deve chamar para obter adb
instância que está procurando.fonte
O único problema com seu código é que você está acessando o objeto que está segurando o manipulador de banco de dados. Você deve acessar o banco de dados diretamente (consulte a variável de banco de dados acima). Esse código retornará seu banco de dados em uma matriz e, em seguida, passará por ele e registrará o nome de todos os usuários no banco de dados.
fonte
Fazendo uma carona na resposta do @MikkaS para o Mongo Client v3.x, eu só precisava do formato async / waitit, que parece um pouco modificado da seguinte forma:
fonte
Fiz algumas experiências para ver se conseguia manter o nome do banco de dados como parte do URL. Prefiro a sintaxe da promessa, mas ainda deve funcionar para a sintaxe de retorno de chamada. Observe abaixo que client.db () é chamado sem passar nenhum parâmetro.
Meu package.json lista o monbodb ^ 3.2.5.
A opção 'useNewUrlParser' não é necessária se você estiver disposto a lidar com um aviso de descontinuação. Mas é aconselhável usar neste momento até a versão 4 ser lançada, onde presumivelmente o novo driver será o padrão e você não precisará mais da opção.
fonte
Resolvi-o facilmente através da execução desses códigos:
Feliz codificação!
fonte
Eu tenho a versão shell MongoDB v3.6.4, abaixo do código use mongoclient, é bom para mim:
fonte
Se alguém ainda está tentando resolver esse erro, eu fiz isso como abaixo.
fonte
As consultas do MongoDB retornam um cursor para uma matriz armazenada na memória. Para acessar o resultado dessa matriz, você deve chamar
.toArray()
no final da consulta.fonte