2013-12-23 4 views
2

Мне нужно выполнить поиск внутри элемента карты с определенным значением в mongodb.

У меня есть этот элемент в базе данных:

{ 
    "_id": ObjectId("52950e93c4aad399cff0d9f9"), 
    "_class": "com.company.model.customer.DbCustomer", 
    "version": NumberLong(0), 
    "channels": { 
    "adea3d4e-2a73-4f3e-8a89-a336d6132909": { 
     "value": "[email protected]", 
     "alias": "email1", 
     "deliveryChannel": "EMAIL", 
     "status": "GOOD", 
     "_class": "com.company.model.customer.CustomerEmail" 
    } 
    } 
} 

Где "adea3d4e-2a73-4f3e-8a89-a336d6132909" является ключом карты каналов.

Что я хочу найти - это канал с определенным значением.

Если «каналы» массиву запрос будет таким образом:

{ "channels" : 
    { "$elemMatch" : { "value" : "[email protected]" } } 
} 

Но, как каналы представляет собой карту, я не могу использовать этот подход.

Можно ли осуществлять поиск внутри карты так же, как и в массиве?

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

Заранее спасибо.

+0

Это часто задает. Вы не можете запросить ключ. – WiredPrairie

ответ

0

AFAIK В любом случае, с нынешними операторами MongoDB это невозможно, без создания сценариев или сопоставления/уменьшения или зная ключи, которые вы хотите запросить заранее.

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

0

я не вижу какой-либо массив, установленный в вышеприведенном примере, набор массива должен быть выглядеть MyArray [1,2,3]

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

>db.Collection.find({"channels.value" : "[email protected]"}) 

Надеется, что это поможет .....

+0

Я попробовал ваше предлагаемое решение, но оно не сработало. Да, в образце кода нет массива, поэтому я пытаюсь найти другое решение; если бы существовал массив, решение $ elemMath решило бы мою проблему. Спасибо, в любом случае. – pg22

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