MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Czy można znaleźćJeden mecz jako pierwszy lub ostatni?

Tak, możesz określić zachowanie .findOne() co najlepiej widać w dokumentacji sterownika natywnego. Jedyna różnica polega na tym, że we wdrożeniu mangusty dokument „opcje” musi być „trzecim” argumentem przekazywanym do metody.

Możesz więc podać do tego specyfikację "sortowania", jak pokazano w dostępnych opcjach:

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

Aby uzyskać dodatkowe informacje, możesz to zrobić w powłoce MongoDB, korzystając z $orderby opcja zapytania:

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

Również .findOne() metoda może zwrócić tylko jeden dokument, ale tak naprawdę jest tylko opakowaniem wokół .find() więc wszystkie modyfikatory mają zastosowanie. Zawijanie po prostu wywołuje .next() na zwróconym kursorze, zwraca dokument i odrzuca kursor.

Ten dłuższy przykład pokazuje różne sposoby, w jakie można to zastosować:

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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak synchronicznie dodawać dane do Mongo Db?

  2. Błąd podczas tworzenia ziarna o nazwie 'personRepository':Wywołanie metody init nie powiodło się; zagnieżdżony wyjątek to com.mongodb.util.JSONParseException:

  3. Jak używać nowego adresu URL z mongodb 3.6 do łączenia się z golang

  4. zapytanie mongodb, aby dopasować każdy element w tablicy dokumentów do warunku

  5. BsonSerializationException występuje, gdy nazwa elementu kończy się kropką