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

Dokážete najít jeden zápas jako první nebo poslední?

Ano, můžete určit chování .findOne() jak je nejlépe vidět v dokumentaci k nativnímu ovladači. Jediný rozdíl je v tom, že v implementaci mongoose dokument "options" musí být "třetím" argumentem předávaným metodě.

Můžete tedy zadat specifikaci "třídění", jak je znázorněno v dostupných možnostech:

Queue.findOne({ },null,{ "sort": { "_id": -1 } },function(err,doc) {

Jen pro další informace to můžete udělat v prostředí MongoDB pomocí následujícího pomocí $orderby možnost dotazu:

db.collection.findOne({ "$query": { }, "$orderby": { "_id": -1 } })

Také .findOne() metoda může vrátit pouze jeden dokument, ale ve skutečnosti je to jen obal kolem .find() takže platí všechny modifikátory. Obal pouze volá .next() na vráceném kurzoru vrátí dokument a zahodí kurzor.

Tento delší příklad ukazuje různé způsoby, jak to lze použít:

var async = require('async'),
    mongoose = require('mongoose'),
    Schema = mongoose.Schema;


mongoose.connect('mongodb://localhost/sequence');

var queueSchema = new Schema({
  name: String,
  same: { type: String, default: "same" }
});

var Queue = mongoose.model( "Queue", queueSchema );

var count = 0;

async.series(
  [

    // Remove any documents
    function(callback) {
      Queue.remove(function(err) {
        if (err) throw err;
        callback();
      });
    },

    // Insert some new ones
    function(callback) {
      async.eachSeries(
        ["one","two","three"],
        function(item,callback) {
          var queue = new Queue({ name: item });
          queue.save(function(err,doc) {
            if (err) throw err;
            console.dir(doc);
            callback(err,doc);
          });
        },
        function(err) {
          callback(err);
        }
      );
    },

    function(callback) {
      async.whilst(
        function() { return count < 2 },
        function(callback) {
          count++
          async.series(
            [
              // findOne is just the first one
              function(callback) {
                Queue.findOne({ "same": "same" },function(err,doc) {
                  if (err) throw err;
                  console.log( "FindOne:\n%s", doc );
                  callback();
                });
              },

              // Or is sorted
              function(callback) {
                Queue.findOne(
                  { "same": "same" },
                  null,
                  { "sort": { "_id": -1 } },
                  function(err,doc) {
                    if (err) throw err;
                    console.log("FindOne last:\n%s", doc );
                    callback();
                  }
                );
              },

              // find is ordered but not singular
              function(callback) {
                async.eachSeries(
                  ["first","last"],
                  function(label,callback) {
                    var direction = ( label == "first" ) ? 1 : -1;
                    var query = Queue.find({ "same": "same" })
                      .sort({ "_id": direction })
                      .limit(1);
                    query.exec(function(err,docs) {
                      if (err) throw err;
                      console.log( ".find() %s:\n%s", label, docs[0] );
                      callback();
                    });
                  },
                  function(err) {
                    callback();
                  }
                );
              },

              // findAndModify takes a sort
              function(callback) {
                Queue.findOneAndUpdate(
                  { "same": "same" },
                  { "$set": { "same": "different" } },
                  { "sort": { "_id": -1 } },
                  function(err,doc) {
                    if (err) throw err;
                    console.log( "findOneAndUpdate:\n%s", doc );
                    callback();
                  }
                );
              }

            ],function(err) {
              callback();
            }
          );
        },
        function(err) {
          callback();
        }
      );
    }
  ],function(err) {
    console.log("done");1
    mongoose.disconnect();
  }
);


  1. co jsou pagecache, dentries, inody?

  2. Jak volat do BGSAVE z BookSleeve?

  3. Výjimka MongoDB:Server hlásí drátovou verzi 0, ale verze libmongoc vyžaduje alespoň 3

  4. 2 způsoby, jak omezit dokumenty vrácené v MongoDB