mongodb的数组字段查询是否有性能问题?
发布于 6 年前 作者 phper-chen 5218 次浏览 来自 问答

例如,有一个水果列表,如下所示:

db.food.find()
{ “_id” : “001”, “fruits” : [ “苹果”, “香蕉”, “橘子” ] }
{ “_id” : “002”, “fruits” : [ “苹果”, “梨子”, “橘子”, “桃子” ] }
{ “_id” : “003”, “fruits” : [ “圣女果”, “梨子”, “橘子”, “桃子” ] }
现在我要查询含有苹果的食品,实例如下: db.food.find({“fruits”:“苹果”})
{ “_id” : “001”, “fruits” : [ “苹果”, “香蕉”, “橘子” ] }
{ “_id” : “002”, “fruits” : [ “苹果”, “梨子”, “橘子”, “桃子” ] }
MongoDB查询数组时,查询条件会与每个元素进行比较,如果匹配上了,就算符合条件

那么问题来了,我们在查询_id 001,002,003时,mongodb直接知道范围了,也就是说我们的查询范围很小; 但是如果是数组字段的查询,mongodb是不是会去每条记录里面的数组字段查找,例如“fruits”,我们要找fruits等于苹果,因为fruits本身的值是个数组,mongodb是不是会因此而做全表扫描呢?这样查询是非常便利的,但是会不会有性能问题呢?有人做过这样的测试吗? 哈哈,我只是抛出问题,有空的话是得试试

3 回复

Multikey Indexes 了解一下

@eggggger 这样索引就会很大啊

https://docs.mongodb.com/manual/core/index-multikey/ 会为数组中的每个值都建索引 嗯 那这样查询效率就解决了

回到顶部