sql >> データベース >  >> NoSQL >> MongoDB

findOneは最初または最後に一致しますか?

    はい、.findOne() ネイティブドライバのドキュメントに最もよく示されているように。唯一の違いは、マングースの実装では「オプション」ドキュメントが必須であるということです。 メソッドに渡される「3番目の」引数になります。

    したがって、使用可能なオプションに示されているように、これに「ソート」仕様を指定できます。

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

    追加情報として、 $orderby クエリオプション:

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

    また、.findOne() メソッドは1つのドキュメントのみを返す場合がありますが、実際には.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. MongoDB10GenのドライバーでのMongoDBシェルコマンドの使用

    2. ConnectionMultiplexer.Connectは、Redisサーバーへの接続中に中断します

    3. Laravelでジョブをキャンセルする

    4. コマンドラインからHerokuRedisに安全に接続するにはどうすればよいですか?