MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Може ли да се намери едно съвпадение първо или последно?

Да, можете да посочите поведението на .findOne() както е най-добре показано в документацията на оригиналния драйвер. Единствената разлика е, че при внедряването на mongoose документът "options" трябва бъде "третият" аргумент, предаден на метода.

Така че можете да предоставите спецификация за „сортиране“ на това, както е показано в наличните опции:

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

Само за допълнителна информация можете да направите това в обвивката на MongoDB със следното, като използвате $orderby опция за заявка:

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

Също така .findOne() методът може да върне само един документ, но всъщност е просто обвивка около .find() така че всички модификатори се прилагат. Обвиването просто извиква .next() върху върнатия курсор, връща документа и изхвърля курсора.

Този по-дълъг пример показва различни начини, по които това може да се приложи:

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. сумиране на две колони в агрегатния метод

  2. Не мога да се свържа с Mongo Cloud mongodb база данни в Golang на Ubuntu

  3. Как да добавите orderby с помощта на @query в хранилището на mongodb

  4. MongoDB $abs

  5. не може да актуализира документ чрез 'findById' и save() с обещание