ネイティブNode.jsドライバのMongo Hintコマンド
-
20-12-2019 - |
質問
2つの同じクエリは、Mongoシェルの異なるレコードとネイティブNode.jsドライバで異なるレコードを与えます:
collection.find(query).limit(1).hint(hint).toArray
collection.find(query).limit(1).hint(hint).toArray
.
ネイティブノード.jsドライバのヒントは無視され、承認された:
Node.jsドライバでの問合せからヒントを削除した場合、その結果はNode.jsドライバでヒントを使用したときと同じでした:
collection.find(query).limit(1).toArray
.
だからの使い方に特別な規則があるかもしれません。js mongoネイティブドライバ?使い方?
解決
実際にはノードドライバに実装されている.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();
}
);
});
.
本当に、「照会」または.sort()
仕様のどちらかを使用する正しい索引について言及している限り、「ヒント」を適用する必要はありません。それでそれはより良いアプローチです。
所属していません StackOverflow