2017-01-25 2 views
0

Я использую MongoDB для хранения различных типов объектов, все в одной коллекции, все объекты соответствуют аналогичному типу. Поля настраиваются для каждого типа объектов. Значения типа поля могут быть текстовыми, целочисленными или плавающими.MongoDB добавить индекс для неизвестных полей

{ 
    objectTypeId: x, 
    fields: [ 
     { fieldTypeId: "x1", fieldName: "fieldX1", fieldValue: "x1" }, 
     { fieldTypeId: "x2", fieldName: "fieldX2", fieldValue: "x2" } 
    ] 
} 

{ 
    objectTypeId: y, 
    fields: [ 
     { fieldTypeId: "y1", fieldName: "fieldY1", fieldValue: "y1" }, 
     { fieldTypeId: "y2", fieldName: "fieldY2", fieldValue: "y2" } 
    ] 
} 

Есть ли способ, чтобы добавить общий индекс, который будет индексировать все мое что-то полевые данные, как:

db.records.createIndex({ fields.fieldName: field.fieldValue }); 

ответ

0

Вы можете создать индекс с помощью db.records.createIndex({ fieldName:1, fieldValue:1 }); Вы указать индекс в поле, а не на Значение.

+0

Это должно быть наоборот: '{fieldValue: 1, fieldName: 1}'. Если у меня возник вопрос, OP хочет иметь индекс по полюName для элементов полей, где fieldValue = «y2», например. –

+0

@AlexBlex, в чем разница между '{fieldValue: 1, fieldName: 1}' и '{fieldName: 1, fieldValue: 1}'? –

+0

Извините, мой плохой. Вопрос заключается в индексировании по fieldValue, где fieldName = "fieldY1". Разница заключается в префиксе сортировки: https://docs.mongodb.com/manual/tutorial/sort-results-with-indexes/#use-indexes-to-sort-query-results –