当前位置:  开发笔记 > 编程语言 > 正文

MongoDB如何索引数组?

如何解决《MongoDB如何索引数组?》经验,为你挑选了2个好方法。

在MongoDB中,如果我要["red", "blue"]在一个字段中存储一个数组(比如说)"color",它是否会编入索引"red","blue"所以我可以查询"red",例如,或者编写{"red", "blue"}一个复合索引?



1> Charles Hoop..:

在索引数组时,MongoDB会索引数组的每个值,以便您可以查询单个项目,例如"red".例如:

> db.col1.save({'colors': ['red','blue']})
> db.col1.ensureIndex({'colors':1})

> db.col1.find({'colors': 'red'})
{ "_id" : ObjectId("4ccc78f97cf9bdc2a2e54ee9"), "colors" : [ "red", "blue" ] }
> db.col1.find({'colors': 'blue'})
{ "_id" : ObjectId("4ccc78f97cf9bdc2a2e54ee9"), "colors" : [ "red", "blue" ] }

有关更多信息,请查看MongoDB关于Multikeys的文档:http://www.mongodb.org/display/DOCS/Multikeys


@GauravAbbi - 我觉得有用,但是mongo只会使用索引来查找第一个数组键.之后,它会扫描那些与其他键匹配的文档集.

2> Maciej A. Be..:

您只需在查询中附加“解释”即可测试索引的使用情况:

> db.col1.save({'colors': ['red','blue']})

# without index
> db.col1.find({'colors': 'red'}).explain()
{
        "queryPlanner" : {
                "plannerVersion" : 1,
                "namespace" : "protrain.col1",
                "indexFilterSet" : false,
                "parsedQuery" : {
                        "colors" : {
                                "$eq" : "red"
                        }
                },
                "winningPlan" : {
                        "stage" : "COLLSCAN", <--- simple column scan
                        "filter" : {
                                "colors" : {
                                        "$eq" : "red"
                                }
                        },
                        "direction" : "forward"
                },
                "rejectedPlans" : [ ]
        },
        "serverInfo" : {
                "host" : "bee34f15fe28",
                "port" : 27017,
                "version" : "3.4.4",
                "gitVersion" : "888390515874a9debd1b6c5d36559ca86b44babd"
        },
        "ok" : 1
}

# query with index
> db.col1.createIndex( { "colors":1 } )
> db.col1.find({'colors': 'red'}).explain()
{
        "queryPlanner" : {
                "plannerVersion" : 1,
                "namespace" : "protrain.col1",
                "indexFilterSet" : false,
                "parsedQuery" : {
                        "colors" : {
                                "$eq" : "red"
                        }
                },
                "winningPlan" : {
                        "stage" : "FETCH",
                        "inputStage" : {
                                "stage" : "IXSCAN", 
            

            
yzh148448
这个屌丝很懒,什么也没留下!
Tags | 热门标签
RankList | 热门文章
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有