sql >> Database >  >> NoSQL >> MongoDB

Node.js, Mongo gegevens zoeken en retourneren

Zoals vermeld in een ander antwoord, is deze code asynchroon, je kunt niet simpelweg de gewenste waarde teruggeven in de keten van callbacks (geneste functies). Je moet een interface vrijgeven waarmee je de oproepcode kunt signaleren zodra je de gewenste waarde hebt (vandaar terugbellen of terugbellen).

Er is een callback-voorbeeld in een ander antwoord, maar er is een alternatieve optie die zeker het onderzoeken waard is:beloften.

In plaats van een callback-functie die u aanroept met de gewenste resultaten, retourneert de module een belofte die twee toestanden kan ingaan, vervuld of afgewezen. De aanroepende code wacht op de belofte om een ​​van deze twee toestanden binnen te gaan, waarbij de juiste functie wordt aangeroepen wanneer dit het geval is. De module activeert de statuswijziging door resolve ing of reject ing. Hoe dan ook, hier is een voorbeeld met beloften:

Db1.js:

// db1.js
var MongoClient = require('mongodb').MongoClient;
/*
node.js has native support for promises in recent versions. 
If you are using an older version there are several libraries available: 
bluebird, rsvp, Q. I'll use rsvp here as I'm familiar with it.
*/
var Promise = require('rsvp').Promise;

module.exports = {
  FindinCol1: function() {
    return new Promise(function(resolve, reject) {
      MongoClient.connect('mongodb://localhost:27017/db1', function(err, db) {
        if (err) {
          reject(err);  
        } else {
          resolve(db);
        }        
      }
    }).then(function(db) {
      return new Promise(function(resolve, reject) {
        var collection = db.collection('col1');
        
        collection.find().toArray(function(err, items) {
          if (err) {
            reject(err);
          } else {
            console.log(items);
            resolve(items);
          }          
        });
      });
    });
  }
};


// app.js
var db = require('./db1');
    
db.FindinCol1().then(function(items) {
  console.info('The promise was fulfilled with items!', items);
}, function(err) {
  console.error('The promise was rejected', err, err.stack);
});

Nu hebben meer up-to-date versies van het node.js mongodb-stuurprogramma native ondersteuning voor beloften, u hoeft geen werk te doen om callbacks in beloften zoals hierboven in te pakken. Dit is een veel beter voorbeeld als u een up-to-date stuurprogramma gebruikt:

// db1.js
var MongoClient = require('mongodb').MongoClient;
                       
module.exports = {
  FindinCol1: function() {
    return MongoClient.connect('mongodb://localhost:27017/db1').then(function(db) {
      var collection = db.collection('col1');
      
      return collection.find().toArray();
    }).then(function(items) {
      console.log(items);
      return items;
    });
  }
};


// app.js
var db = require('./db1');
    
db.FindinCol1().then(function(items) {
  console.info('The promise was fulfilled with items!', items);
}, function(err) {
  console.error('The promise was rejected', err, err.stack);
});

Beloften bieden een uitstekende methode voor asynchrone controlestroom, ik raad ten zeerste aan om er wat tijd aan te besteden om er vertrouwd mee te raken.



  1. Hoe kom ik aan de datum waarop een MongoDB-verzameling is gemaakt met behulp van het MongoDB C#-stuurprogramma?

  2. lente data mongodb id veldtoewijzing

  3. Langlopende bewerkingen beheren in MongoDB

  4. Detecteren of een waarde ten minste één numeriek cijfer in SQL bevat