sql >> Databáze >  >> NoSQL >> MongoDB

Vraťte výsledky mongoose ve vyhledávacím dotazu do proměnné

Existuje několik způsobů, jak dosáhnout toho, co chcete.

1. Používání dotazů Mongoose

V této strategii vaše funkce vrací dotaz Mongoose, který můžete později použít k vyvolání metody exec a použijte jej k získání výsledků.

function getJedisQuery(name){
   var query = Jedi.find({name:name});
   return query;
}

Pak jej můžete použít jednoduše takto:

var query =  getJedisQuery('Obi-wan');
query.exec(function(err,jedis){
   if(err)
      return console.log(err);
   jedis.forEach(function(jedi){
      console.log(jedi.name);
   });
});

2. Používání objektů podobných Mongoose Promise

Moogose poskytuje podporu pro objekty podobné slibům. Jediné, co musíte udělat, je něco podobného tomu, co jsem udělal výše, ale tentokrát vyvoláte exec metoda bez zpětného volání.

function getJedisPromise(name){
   var promise = Jedi.find({name:name}).exec();
   return promise;
}

Pak jej můžete použít jednoduše:

var promise = getJedisPromise('Luke');
promise.then(function(jedis){
   jedis.forEach(function(jedi){
      console.log(jedi.name);
   });
})

Jak je zdůrazněno v sekci komentářů této odpovědi, tyto objekty nejsou ve skutečnosti sliby a to je třeba vzít v úvahu (viz Dotazy nejsou sliby).

3. Pomocí Mongoose Streams

A konečně, Mongoose má také podporu pro streamy a streamy jsou emitory událostí. Můžete tedy získat stream a poté se přihlásit k odběru událostí „data“ a „chyba“. Takhle:

function getjedisStream(name){
   var stream = Jedi.find({name:name}).stream();
   return stream;
}

Pak můžete jednoduše udělat:

var stream = getJedisStream('Anakin');
stream.on('data', function(jedis){
   jedis.forEach(function(jedi){
      console.log(jedi.name);
   });
});
stream.on('error', function(error){
    console.log(error);
});

Zdroj, pro budoucí použití.



  1. Nelze se připojit k MongoDB Atlas (queryTxt ETIMEOUT)

  2. Jak uložím/zobrazím odstavce pomocí mongodb?

  3. Jak extrahuji vytvořené datum z Mongo ObjectID

  4. Redis AOF fsync (VŽDY) vs. strom LSM