Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   db.collection равен undefined в MongoDB (https://javascript.ru/forum/node-js-io-js/75578-db-collection-raven-undefined-v-mongodb.html)

Andrew K 21.10.2018 19:38

db.collection равен undefined в MongoDB
 
Здравствуйте! Начал изучать MongoDB и столкнулся с непонятным поведением базы данных.

Вот код подключающий базу данных MongoDB выводящий свойство collection:
let MongoClient = require('mongodb').MongoClient;

MongoClient.connect('mongodb://localhost:27017/test', { useNewUrlParser: true }, function(err, db) {

    console.log(db.collection);  // undefined
});

Проблема в том, что в объекте db нет свойства collection. Из-за этого я не могу, например, создать новую коллекцию (db.collection('mytable')). В чем может быть причина?

Может я неверно установил Монго? Но так она бы вообще не работала...

Audaxviator 21.10.2018 21:43

А не надо ничего создавать. Просто писать
db.collection('mytable').insert(...

Andrew K 22.10.2018 07:06

Этот код не сработает потому что db.collection равен undefined (в объекте db нет такого свойства или метода).
let MongoClient = require('mongodb').MongoClient;

MongoClient.connect('mongodb://localhost:27017/test', { useNewUrlParser: true }, function(err, db) {
    console.log(db.collection);  // undefined

    db.collection('mytable').insert({'name': "Andrew"}); // db.collection is not a function
});

Audaxviator 22.10.2018 07:38

Вложений: 1
Шеф! Всё пропало!
Свойства нет, оно не работает!

(а у меня работает)
var url = 'mongodb://xxxxxx:yyyyy@ds115701.mlab.com:15701/bookexpress';
MongoClient.connect(url, function(err, db) {
  db.collection('asdfg').insert({ text: 'ASDFGH' });
  db.close();
});

Andrew K 22.10.2018 08:19

Особенно бесит во всех этих консольных программах что никогда парой команд нельзя что-то поставить. Может в документации написано про пару команд, а в реальности после этого получаешь 50 строк ошибок. И вот сидишь пол дня и читаешь форумы вставляя непонятные команды чтобы исправить непонятную ошибку. Черт возьми, я просто хочу попробовать этот инструмент. Нафига его проектировать так, чтобы без танцев с бубном нельзя было поставить. В конце концов почему нельзя написать нормальную инструкцию где был бы дан железобетонный способ установки программы? Но нет. Это слишком очевидно и просто. Обязательно нужно сидеть, исправлять ошибки которые ты не совершал, перечитывать темы таких же неудачников, материться и портить себе настроение.

Даже после установки этой базы данных она не может нормально работать. А сейчас после установок и переустановок она вообще не запускается. Полностью с вам согласен — всё пропало.

Audaxviator 22.10.2018 11:41

https://metanit.com/nosql/mongodb/2.2.php
но есть же драйвер mongoose (он хороший)
И кстати, на официальном сайте Монги совершенно железобетонные инструкции по установке - для всех ОС, поимённо.

agsh 22.11.2018 17:58

Цитата:

Сообщение от Andrew K (Сообщение 496772)
Этот код не сработает потому что db.collection равен undefined (в объекте db нет такого свойства или метода).
let MongoClient = require('mongodb').MongoClient;

MongoClient.connect('mongodb://localhost:27017/test', { useNewUrlParser: true }, function(err, db) {
    console.log(db.collection);  // undefined

    db.collection('mytable').insert({'name': "Andrew"}); // db.collection is not a function
});

Потому что в последних версиях драйвера подключение возвращает инстанс MongoClient, а не Db.

Audaxviator 22.11.2018 19:28

Хе. Ну, какую в колбеке написать переменную - это без разницы.
Чего они наусложняли в v3.1 - то, что нужно зачем-то ещё и имя базы писать, вот так:
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://xxxxxx:yyyyyy@ds115701.mlab.com:15701/bookexpress';
MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
	db.db('bookexpress').collection('aaaa').insertOne({ text: 'A' });
	console.log(err);
	db.close();
});

При этом, если я его не пишу в URL при коннекте - то этой базы, говорит, нету (вторая db - null). Зачем же я его пишу два раза?
Бессмыслица какая-то.

UPD
Хотя, как выясняется, если подключаться к локалхосту - всё выглядит правильно
var url = 'mongodb://localhost:27017';
MongoClient.connect(url, { useNewUrlParser: true }, function() {
	arguments['1'].db('dbdbdb').collection('aaaa').insertOne({ text: 'A' });
	console.log(arguments['0']);
	arguments['1'].close();
});

Let it be


Часовой пояс GMT +3, время: 00:42.