2014-02-11 5 views
1

Я подключаюсь к базе данных и получаю клиент. Следующим шагом является создание коллекции (таблицы).mongo on nodejs collection не найден

db.createCollection("test", function(err, collection){ //I also tried db.collection(... 
    if(collection!=null) 
    { 
     collection.insert({"test":"value"}, function(error, model){console.log(model)}); 
    } 
    else if(err!=null) 
     console.log(err); 
}); 

Теперь я бы создал коллекцию «test», а также документ (строку) «test».

Далее, чтобы получить содержание коллекции:

db.test.find({}); //An empty query document ({}) selects all documents in the collection 

Здесь я получаю сообщение об ошибке: Не удается вызвать «найти» неопределенных. Итак, что я сделал не так?

Edit: я подключиться к базе данных таким образом:

var mongoClient = new MongoClient(new Server("localhost", 27017, {native_parser:true})); 
mongoClient.open(function(err,mongoclient){ 
if(mongoclient!=null) 
{ 
    var db = mongoclient.db("box_tests"); 
    startServer(db); 
} 
else if(err!=null) 
    console.log(err); 
}); 
+0

Ошибка указывает на «db», не связанный с базой данных – Jinxcat

+0

Соединение создается в редакции моего вопроса. – marcel

ответ

2

В командной строке mongo вы можете использовать db.test.find({}), но в javascript нет способа реплицировать этот интерфейс до сих пор (возможно, с помощью прокси-совместителей в какой-то день).

Так выдает ошибку Невозможно вызвать «найти» неопределенной, потому что нет тест в дб.

АНИ для Node.js водителя MongoDB, как это:

db.collection('test').find({}).toArray(function (err, docs) { 
    //you have all the docs here. 
}); 

Другой полный пример:

//this how you get a reference to the collection object: 
var testColl = db.collection('test'); 

testColl.insert({ foo: 'bar' }, function (err, inserted) { 
    //the document is inserted at this point. 

    //Let's try to query 
    testColl.find({}).toArray(function (err, docs) { 
    //you have all the docs in the collection at this point 
    }); 
}); 

помнить также, что MongoDB является схема меньше и вам не нужно для создания коллекций раньше времени. Существует несколько конкретных случаев, таких как создание коллекции с ограниченным доступом и несколько других.

+0

Я не мог найти это в mongo-api. database.collection.find() используется там много. – marcel

+1

Документация драйвера mongo nodejs имеет две проблемы: 1-очень плохой SEO. 2-Он выглядит точно так же, как и mongo doc. Вы можете посмотреть здесь http://mongodb.github.io/node-mongodb-native/api-generated/collection.html –

+0

+1 за то, что вы считаетесь схематичным и не нужно создавать фронт. – bryanmac

1

Если вы называете db.test.find «следующий» после того, как блок db.createCollection он заканчивает тем, что в непосредственной близости перед тем db.createCollection успешно. Итак, в этот момент db.test не определен.

Помните, что узел является асинхронным.

Чтобы получить результаты, которые, как я полагаю, вы ожидаете, db.test.find должен быть в обратном вызове collection.insert, где вы вызываете console.log (model).

db.createCollection("test", function(err, collection){ 
    if(collection!=null) 
    { 

     // only at this point does db.test exist 

     collection.insert({"test":"value"}, function(error, model){ 
      console.log(model) 

      // collection and inserted data available here 
     }); 
    } 
    else if(err!=null) 
     console.log(err); 
}); 

// code here executes immediately after you call createCollection but before it finishes 

Оформить заказ модуля async.js узла. Хорошая запись здесь: http://www.sebastianseilund.com/nodejs-async-in-practice

+0

Он не существует в обратном вызове – marcel

Смежные вопросы