2013-11-13 4 views
0

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

Как правило, основной элемент списка может выглядеть так (из моих членов коллекции):

{ 
    "_id" : ObjectId("52284ae408edcb146200009f"), 
    "list_id" : 1, 
    "status" : "active", 
    "imported" : 1, 
    "fields" : { 
     "firstname" : "John", 
     "lastname" : "Doe", 
     "email" : "[email protected]", 
     "birthdate" : ISODate("1977-09-03T23:08:20.000Z"), 
     "favorite_color" : "Green", 
     "interests" : [ 
      { 
       "id" : 8, 
       "value" : "Books" 
      }, 
      { 
       "id" : 10, 
       "value" : "Travel" 
      }, 
      { 
       "id" : 12, 
       "value" : "Cooking" 
      }, 
      { 
       "id" : 15, 
       "value" : "Wellnes" 
      } 
     ] 
    }, 
    "created_at" : ISODate("2012-05-06T15:12:26.000Z"), 
    "updated_at" : ISODate("2012-05-06T15:12:26.000Z") 
} 

Всех поля под индексом «полей», это поле, является уникальным для текущего списка идентификаторов - и эти поля могут меняться для каждого список ID, что означает новый список может выглядеть так:

{ 
    "_id" : ObjectId("52284ae408edcb146200009f"), 
    "list_id" : 2, 
    "status" : "active", 
    "imported" : 1, 
    "fields" : { 
     "fullname" : "John Doe", 
     "email" : "[email protected]", 
     "cell" : 123456787984 
    }, 
    "created_at" : ISODate("2012-05-06T15:12:26.000Z"), 
    "updated_at" : ISODate("2012-05-06T15:12:26.000Z") 
} 

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

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

Есть ли решение для этого?

ответ

0

Если вы реорганизуете свои документы так, чтобы у вас был массив полей, вы можете использовать индексы.

fields: [ 
    { name: 'fullName', value: 'John Doe' }, 
    { name: 'email', value: '[email protected]' }, 
    ... 
] 

Создайте индекс на fields.name и fields.value.

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

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