Вставить в MongoDB через Node.js - PullRequest
       4

Вставить в MongoDB через Node.js

5 голосов
/ 15 апреля 2011

Я новичок в Node.js и MongoDB, но я намерен создать очень простое веб-приложение на основе геолокации в реальном времени. Вот моя попытка выяснить, как Node и MongoDB взаимодействуют:

var mongo = require('mongodb');

var db = new mongo.Db('test', new mongo.Server('localhost',22892, {}), {});

db.open(function(){});

db.collection('docs', function(err,collection){
    doc = {"foo":"bar"};
    collection.insert(doc, function(){});
});

Я вижу, что это соединение:

Thu Apr 14 15:24:12 [initandlisten] connection accepted from 127.0.0.1:46968 #26
Thu Apr 14 15:24:12 [conn26] building new index on { _id: 1 } for test.docs
Thu Apr 14 15:24:12 [conn26] done for 0 records 0secs

Но это не вставка каких-либо документов в базу данных. Может кто-нибудь сказать мне, что я делаю не так?

Спасибо

1 Ответ

28 голосов
/ 15 апреля 2011
db.open(function(err, client){
    client.createCollection("docs", function(err, col) {
         client.collection("docs", function(err, col) {
             for (var i = 0; i < 100; i++) {
                 col.insert({c:i}, function() {});
             }
         });
    });
});

Вы забыли сделать все в вашем open обратном вызове. Это важно, иначе ваш код будет запущен до того, как ваше соединение с базой данных будет открыто. Вы должны делать все асинхронно. Также лучше создать коллекцию, если она не существует.

Взгляните на подробные примеры на странице github

Теперь это похоже на спагетти обратного вызова, поэтому мы используем flowcontrol, как Step, чтобы сделать его красивым.

Step(
    function() {
        db.open(this);
    },
    function(err, client) {
        client.createCollection("docs", this);
    },
    function(err, col) {
        for (var i = 0; i < 100; i++) {
            col.insert({c:i});
        }
    }
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...