2013-06-09 4 views
2

Доброе утро. У меня проблемы. У меня есть эти поля:

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 ... Как это исправить?

+0

извлечение избыточных $ и – Sammaye

+0

Я думаю, что в этом случае вы должны использовать составные индексы. –

+0

есть. Конечно. Я также использую составные индексы. Дмитрий, я также использую все возможные индексы. Но когда я оборачиваю и вокруг или - индексы отваливаются –

ответ

1

Возможно, пришло время обновить версию 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" 
         ] 
       ] 
     } 
} 
+0

может быть. Но моя версия 2.2.3 :) Хм .. Это тоже работа для меня. Но более тяжело не работать. Я попробую найти ошибку –

+0

@KirillMuchow, который более сложный запрос не работает на вас? –

+0

Например {$ и: [{$ или: [{name: 'Mike'}, {city: 'CA'}]}, {$ или: [{pets: {$ all: 'dog'}}, { адрес: 'smtg'}]}]} –

Смежные вопросы