Извините, если это было задано раньше. Я не мог найти окончательного ответа. Могу ли я запросить индекс mongodb, если мой запрос содержит оператор $или? Мой запрос выглядит примерно так:
// find everything in the collection
$cursor = $collection->find(array(
'$or' => array(
array('album_id' => array(
'$in' => $this->my_album_ids
),
'type' => array(
'$in' => array('like','comment')
)
),
array(
'user_id' => (int)session_item('user_id'),
'type' => 'message',
'reply' => 'no'
)
),
'timestamp' => array('$gt' => (int)$since)))->sort(array('timestamp'=>-1))->skip($start)->limit($amount);
Пример в PHP, но я предполагаю, что это применимо к любому языку.
Update:
Ниже перечислены мои индексы, но указанный выше запрос их не использует. Мне кажется, что это правда.
$collection->ensureIndex(array(
'album_id' => 1,
'type' => 1,
'timestamp' => -1,
));
$collection->ensureIndex(array(
'user_id' => 1,
'type' => 1,
'reply' => 1,
'timestamp' => -1,
));
Вот мой объяснение()
Array
(
[cursor] => BasicCursor
[nscanned] => 12
[nscannedObjects] => 12
[n] => 6
[scanAndOrder] => 1
[millis] => 0
[nYields] => 0
[nChunkSkips] => 0
[isMultiKey] =>
[indexOnly] =>
[indexBounds] => Array
(
)
[allPlans] => Array
(
[0] => Array
(
[cursor] => BasicCursor
[indexBounds] => Array
(
)
)
)
[oldPlan] => Array
(
[cursor] => BasicCursor
[indexBounds] => Array
(
)
)
)