MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Bisakah findOne cocok terlebih dahulu atau terakhir?

Ya, Anda dapat menentukan perilaku .findOne() seperti yang terbaik ditunjukkan dalam dokumentasi driver asli. Satu-satunya perbedaan adalah bahwa dalam implementasi luwak dokumen "opsi" harus menjadi argumen "ketiga" yang diteruskan ke metode.

Jadi Anda dapat memberikan spesifikasi "sort" untuk ini seperti yang ditunjukkan pada opsi yang tersedia:

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

Hanya untuk informasi tambahan, Anda dapat melakukan ini di shell MongoDB dengan yang berikut ini, menggunakan $orderby opsi kueri:

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

Juga .findOne() metode hanya dapat mengembalikan satu dokumen, tetapi sebenarnya hanya pembungkus .find() jadi semua pengubah berlaku. Pembungkusnya hanya memanggil .next() pada kursor yang dikembalikan, mengembalikan dokumen dan membuang kursor.

Contoh yang lebih panjang ini menunjukkan berbagai cara penerapannya:

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. Bagaimana saya bisa menggunakan Driver MongoDB dengan kerangka kerja C# ASP.NET Core API?

  2. Kesalahan Agregasi MongoDB :Objek spesifikasi tahap saluran pipa harus berisi tepat satu bidang

  3. Cara Membagi Shard Key Berbasis GUID Secara Terprogram dengan MongoDB

  4. Kunci dinamis setelah $group by

  5. Bagaimana saya bisa memeriksa dokumen duplikat di Mongoose?