javascript - native Node.js 驱动程序的 mongo 提示命令

标签 javascript node.js mongodb mongodb-query

两个相同的查询在 mongo shell 和 native Node.js 驱动程序中给出了不同的记录:

collection.find(query).limit(1).hint(hint).toArray

collection.find(query).limit(1).hint(hint).toArray

我认为在 native Node.js 驱动程序提示被忽略,并且它被批准了:

当我从node.js驱动程序中的查询中删除提示时,结果与我在node.js驱动程序中使用提示时得到的结果相同:

collection.find(query).limit(1).toArray 

那么也许有特殊的规则在node.js mongo native 驱动程序中使用提示?如何使用?

最佳答案

Node 驱动程序中实际上没有实现 .hint() 方法。为此,您需要在.find()中为光标创建提供“选项”。 :

collection.find({},{ "hint": { "a": -1 }}).limit(1).toArray(function(err,docs) {

如果确实匹配指定的索引,那么您将获得按所选索引顺序返回的文档。也许是一个更长的例子:

var async = require("async"),
    mongo = require("mongodb"),
    MongoClient = mongo.MongoClient;


MongoClient.connect('mongodb://localhost/test',function(err,db) {

  async.waterfall(
    [
      function(callback) {
        db.collection('asample',function(err,collection) {
          if (err) throw err;
          callback(err,collection);
        });
      },

      function(collection,callback) {
        collection.remove(function(err,removed) {
          if (err) throw err;
          callback(err,collection);
        });
      },

      //
      function(collection,callback) {
        async.eachSeries(
          [
            { "a": 1 },
            { "a": 2 }
          ],
          function(item,callback) {
            collection.insert(item,function(err,num) {
              if (err) throw err;
              callback();
            });
          },
          function(err) {
            if (err) throw err;
            callback(err,collection);
          }
        );
      },

      function(collection,callback) {
        collection.ensureIndex({ "a": -1 },function(err,index) {
          if (err) throw err;
          console.log("Index:\n%s", index);
          callback(err,collection);
        });
      },

      function(collection,callback) {
        collection.find({},{ "hint": { "a": -1 }})
          .limit(1).toArray(function(err,docs) {
            if (err) throw err;
            console.log("Docs:\n%s", JSON.stringify( docs, undefined, 4));
            callback();

        });
      }

    ],
    function(err) {
       console.log("done");
       db.close();
    }

  );

});

按照相反的索引顺序,首先返回值“2”。

实际上,只要您的“查询”或 .sort() 规范提到要使用的正确索引,就不需要应用“提示”。所以这将是更好的方法。

关于javascript - native Node.js 驱动程序的 mongo 提示命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25007936/

相关文章:

JavaScript 在内容周围添加 HTML 标签

javascript - nodejs ffmpeg在特定时间播放视频并将其流式传输到客户端

javascript - 如何在不使用 npm install 的情况下使用 nodemon

windows - MongoDB 新手无法运行命令 mongo

java - BSON 字段名称无效

javascript - Google Maps API 加载问题。需要技术解释。应该很容易回答

javascript - Jquery + JavaScript : Creating a cookie with toggle

javascript - stripe checkout 不验证必填字段

node.js - 如何使用nodejs基于url启用/禁用 session ?

c - 在函数调用中使用从函数返回的指针