mongodb - 如何索引 $and operator over $or operator

标签 mongodb

早上好。我有一些问题。我有这些字段:

name: "Mike",
city: "NY",
address: "something",
pets: ["dog", "cat"]

我创建了索引

db.person.ensureIndex({name: 1})
db.person.ensureIndex({city: 1})
db.person.ensureIndex({address: 1})
db.person.ensureIndex({pets: 1})

查询是

db.person.find({$and: [{$or: [{name: "Mike"}, {city: "CA"}]}, {pets: "dog"}]}).explain()

而且我没有得到 B_tree 查询..我得到了 BasicCursor...它如何修复?

最佳答案

可能是时候升级您的 MongoDB 版本了。使用 v2.2.1 我得到一个 BTree 游标。

> db.person.insert({name: "Mike", city: "NY", address: "something", pets: ["dog", "cat"]})
> db.person.ensureIndex({name: 1})
> db.person.ensureIndex({city: 1})
> db.person.ensureIndex({address: 1})
> db.person.ensureIndex({pets: 1})
> db.person.find({$and: [{$or: [{name: "Mike"}, {city: "CA"}]}, {pets: "dog"}]}).explain()
{
        "cursor" : "BtreeCursor pets_1",
        "isMultiKey" : true,
        "n" : 1,
        "nscannedObjects" : 1,
        "nscanned" : 1,
        "nscannedObjectsAllPlans" : 1,
        "nscannedAllPlans" : 1,
        "scanAndOrder" : false,
        "indexOnly" : false,
        "nYields" : 0,
        "nChunkSkips" : 0,
        "millis" : 0,
        "indexBounds" : {
                "pets" : [
                        [
                                "dog",
                                "dog"
                        ]
                ]
        }
}

关于mongodb - 如何索引 $and operator over $or operator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17008247/

相关文章:

sql - MongoDB 的 JDBC 驱动程序

java - 找不到适合我类(class)的编解码器

mongodb - meteor 绝对网址

mongodb - 即时定义 Mongoose Schema

javascript - Node js mongoose 从集合中的数组中查找数据

node.js - MongoDB - 过滤条件和 3-deep 对象

django - Pymongo 查询正常,但 Mongoengine 什么也不查询

mongodb - mongo 控制台打开时出现 Mlock 错误 - mlock : Cannot allocate locked memory 失败

linux - 增加 MongoDB 最大连接数

javascript - $lookup结果显示[object Object]