两个相同的查询在 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/