MongoDB C # Индекс массива или индексация внутренних элементов массивов - PullRequest
2 голосов
/ 22 февраля 2011

Я использую динамический массив хранения ключ, значение, тип в dynamicArray.MongoDB / C # обычно используют индекс массива, такой как db.contents.ensureIndex ({dynamicArray: 1}).Хранение более 30 или 40 элементов генерирует большую информацию для индексации с использованием этого метода.Существуют другие способы индексирования не полного массива, а ключа элементов этого массива, ограничивающего хранилище индекса.Что-то вроде -> Индексный ключ: Имя, Индексный ключ: Город и не все.

dynamicArray:
{
    item : { Key: "Name", Value: "Peter", Type:String }
    item : { Key: "Age", Value: "18", Type:int }
    item : { Key: "City", Value: "San Jose", Type:String }
    ...30 to 40 items.
}

Ответы [ 2 ]

2 голосов
/ 22 февраля 2011

Что-то вроде -> Индексный ключ: Имя, Индексный ключ: Город и не все.

Вы не можете сделать это специально, вы не можете индексировать значение ключа.

Одно решение

Однако вы можете индексировать элементы в массиве.

Предположим, что ваши данные выглядят так:

items:
  [
       { Key: "Name", Value: "Peter", Type:String },
       { Key: "Age", Value: "18", Type:int },
       { Key: "City", Value: "San Jose", Type:String },
       ...30 to 40 items.
  ]

Чтобы создать индекс для items.Key, вы должны сделать следующее:

 db.foo.ensureIndex( { 'items.Key' } )

Когда вы будете делать следующее, вы будете использовать индекс:

 db.foo.find( { 'items.Key' : "City", 'items.value' : "San Jose" } )

Это сузит поиск только до тех элементов, которые имеют Key = "City". Если это все, то, вероятно, это не поможет.

Альтернативный раствор

Почему items массив? Разве вы не можете структурировать данные следующим образом:

items:
  {
       "Name" : { Value: "Peter", Type:String },
       "Age" : { Value: "18", Type:int },
       "City" : { Value: "San Jose", Type:String },
       ...30 to 40 items.
  }

Теперь вы можете индексировать на items.City.Value, что вы и искали. Это также делает структуру данных немного меньше.

В зависимости от характера ваших данных, вы также можете посмотреть разреженных индексов , чтобы помочь контролировать размер вашего индекса.

0 голосов
/ 22 февраля 2011

Извините, но mongoDB не позволяет индексировать частично по условию.

...