2013-11-19 6 views
1

У меня есть следующий документ:Как запросить динамический ключ - MongoDB дизайн схемы

{ 
    _id  : 1, 

    key1 : { 
        samekeyA : "value1", 
        samekeyB : "value2" 
       }, 

    key2 : { 
        samekeyA : "value3", 
        samekeyB : "value4" 
       }, 

    key3 : { 
        samekeyA : "value5", 
        samekeyB : "value6" 
       } 
} 

выше; key1, key2 и key3 даны, чтобы продемонстрировать, что я не знаю полного ключа, кроме его префикса; но внутренние ключи samekeyA и samekeyB те, кого я знаю. Мне нужны такие запросы: db.coll.find({"key*.samekeyA":"value1"}).

Я думаю, что нет способа манго - ключевые слова регулярного выражения? - чтобы добиться этого, поэтому любые идеи по этому поводу? Должен ли я переделать свой документ?

ответ

2

Я бы рекомендовал реструктурировать модель.

{ 
    _id  : 1, 

    data: [ { 
        key  : "key1", 
        samekeyA : "value1", 
        samekeyB : "value2" 
       }, 

       { 
        key  : "key2", 
        samekeyA : "value3", 
        samekeyB : "value4" 
       }, 

       { 
        key  : "key3", 
        samekeyA : "value5", 
        samekeyB : "value6" 
       } 
    ] 
} 

И запрос:

db.col.find({"data.samekeyA": "value1"}) 

В настоящее время (и, вероятно, в будущем тоже) это не представляется возможным запрашивать коллекции MongoDB с групповыми символами в именах полей (спасибо @gWiz).

+0

То есть MongoDB не имеет такого оператора запросов, который позволяет сопоставлять поля с регулярным выражением. –

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