2011-04-14 7 views
5

Je suis nouveau à la fois Node.js et MongoDB, mais j'ai l'intention de créer une application Web basée sur la géolocalisation en temps réel très basique. Voici ma tentative de trouver comment noeud et MongoDB interagissent:Insérer dans MongoDB via 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(){}); 
}); 

Je peux voir que ce se connecte:

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 

Mais il n'insérer des documents dans la base de données. Quelqu'un peut-il me dire ce que je fais mal?

Merci

+0

quel pilote mongodb particulier utilisez-vous? – Raynos

+0

, vous pouvez vous référer à ce lien. https://programmerblog.net/nodejs-mongodb-tutorial/ –

Répondre

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

Vous avez oublié de faire tout dans votre rappel open. Ceci est important sinon votre code s'exécute avant que votre connexion à la base de données soit ouverte. Vous devez tout faire asynchrone. Il est également préférable de créer la collection si elle n'existe pas.

Jetez un oeil à des exemples détaillés au github page

Maintenant, cela ressemble à des spaghettis de rappel pour que nous utilisons flowcontrol comme Step pour le rendre joli.

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

Code agréable et lisible; travaillé pour moi. Merci! – ambrus

Questions connexes