2013-05-03 1 views
0

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

{ 
    field1: "value1" 
    field2: "value2" 
} 

и

{ 
    field3: "value3" 
    field4: "value1" 
} 

и строка запроса «value1» оба документа будут возвращены.

Если у вас нет возможности сделать это в MongoDb, какая лучшая стратегия для его реализации на уровне базы данных или кода? Я попытался создать getter в C#, который выполняет итерации по всем свойствам сопоставленного объекта и возвращает массив и сохраняет этот массив в базе данных, но IMO - это неэффективное и уродливое решение.

+0

[Вот работоспособным ответ] (http://stackoverflow.com/a/19802670/825421) из дублированного вопроса (хотя решение может быть слишком медленным для вас). –

ответ

1

Невозможно напрямую сделать это в MongoDB.

Наличие неограниченного набора имен полей может быть признаком того, что ваша схема должна быть переработана. Вы считали, что вместо того, чтобы ваши динамические имена полей были значениями внедренного объекта? Как и в:

fields: [{name: "field1", value: "value1"}, {name: "field2", value: "value2"}] 

Тогда ваш запрос будет выглядеть следующим образом:

db.coll.find({'fields.value': 'value1'}); 
+0

Схема была в порядке, пока клиент не попросил меня сделать поиск по всему полю, поэтому теперь мне нужно найти способ его реализовать. У меня есть несколько классов C#, сопоставленных с коллекциями mongodb, и переработка их в массивы пар ключ-значение, кажется, слишком хардкор :-) Я попытался сделать более легкое решение, которое я описал в вопросе, но я все еще надеюсь найти более простой способ – jezzarax