首页 > 解决方案 > Mongo - 如何使用排序索引过滤器

问题描述

我正在索引这个 mongo 查询,但它不起作用。

db.getCollection("users").find(
    { 
        "find" : "users", 
        "filter" : {
            "userSetting.url" : "michael.john"
        }, 
        "sort" : {
            "_id" : -1.0
        }, 
        "projection" : {
            "userSetting" : 1.0, 
            "user" : 1.0, 
            "isOnline" : 1.0
        }, 
        "limit" : 1.0, 
        "singleBatch" : true, 
        "batchSize" : 1.0, 
        "returnKey" : false, 
        "showRecordId" : false, 
        "lsid" : {
            "id" : BinData(4, "JdjijSjxxKahhh7dWf92w==")
        }, 
        "$db" : "manager"
    }
);

我索引了 user.Setting.url 和 _id (-1) 但它不使用索引

你有什么方法可以索引吗?

谢谢

标签: mongodbmongodb-query

解决方案


您正在运行 需要两个参数的mongo shell 方法和文档,即正确的方法应该是db.collection.find()queryprojection

db.getCollection("users").find(
    { "userSetting.url" : "michael.john" }, 
    {
        "userSetting" : 1.0, 
        "user" : 1.0, 
        "isOnline" : 1.0
    }
).batchSize(1).sort({ "_id": -1 }).limit(1);

我相信您正在使用助手find可以发出的命令:db.runCommand()

db.runCommand(
    { 
        "find" : "users", 
        "filter" : {
            "userSetting.url" : "michael.john"
        }, 
        "sort" : {
            "_id" : -1.0
        }, 
        "projection" : {
            "userSetting" : 1.0, 
            "user" : 1.0, 
            "isOnline" : 1.0
        }, 
        "limit" : 1.0, 
        "singleBatch" : true, 
        "batchSize" : 1.0, 
        "returnKey" : false, 
        "showRecordId" : false, 
        "lsid" : {
            "id" : BinData(4, "JdjijSjxxKahhh7dWf92w==")
        }, 
        "$db" : "manager"
    }
);

推荐阅读