2010-10-30 7 views
57

В MongoDB, если бы я хранить массив (скажем ["red", "blue"]) в поле "color", это индекс "red" и "blue", так что я мог бы запросить "red", например, или же в {"red", "blue"} сделать композитный индекс?Как массивы индексов MongoDB?

ответ

76

Когда дело доходит до индексирования массивов, MongoDB индексирует каждое значение массива, чтобы вы могли запрашивать отдельные элементы, такие как «красный». Например:

> 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

+0

возможно искать для частичного массива, как для («цвета»: [ «красный», «синий», «зеленый»]), можно ли найти поиск («цвета»: [«красный», «синий»]), или я должен делать их индивидуально? –

+2

@GauravAbbi - Я думаю, что работает, но mongo будет использовать индекс только для поиска первого ключа массива. После этого он сканирует этот набор документов для тех, которые соответствуют остальным ключам. – Mnebuerquo

+0

Какие соображения будут приняты, чтобы использовать мультикидные индексы, связанные с составным индексом. например индекс, описывающий основной цвет и вторичный цвет? –