2011-04-14 18 views
5

Soy nuevo en Node.js y MongoDB, pero tengo la intención de crear una aplicación web basada en geolocalización muy básica en tiempo real. Aquí está mi intento de encontrar la manera de interactuar de nodo y MongoDB:Insertar en MongoDB a través de Node.js

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(){}); 
}); 

puedo ver que esto está conectando:

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 

Pero no es la inserción de ningún documento en la base de datos. ¿Alguien puede decirme qué estoy haciendo mal?

Gracias

+0

¿qué conductor de mongodb particular estás usando? – Raynos

+0

puede consultar este enlace. https://programmerblog.net/nodejs-mongodb-tutorial/ –

Respuesta

28
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() {}); 
      } 
     }); 
    }); 
}); 

que se olvidó de hacer todo en su open de devolución de llamada. Esto es importante; de ​​lo contrario, su código se ejecutará antes de que su conexión a la base de datos esté abierta. Tienes que hacer todo asíncrono. También es mejor crear la colección si no existe.

Tome un vistazo a los ejemplos detallados en el github page

Ahora esto se parece espaguetis de devolución de llamada por lo que utilizar FlowControl como Step para que sea bonita.

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}); 
     } 
    } 
); 
+1

Código agradable y legible; trabajó para mi. ¡Gracias! – ambrus

Cuestiones relacionadas