2010-09-27 4 views
0

Допуская коллекции, как это:Как найти значение в коллекции mongoDB, независимо от имени поля?

People 
{ 
    "name": "John Doe", 
    "email": "John Doe <[email protected]>", 
    "stuff": "foo" 
    "morestuff": "bar" 
}, 
{ 
    "name": "Homer Simpson", 
    "email": "Homer Simpson <[email protected]>", 
    "stuff": "bar" 
    "morestuff": "foo" 
}, 
{ 
    "name": "Bart Simpson", 
    "email": "Bart Simpson <[email protected]>", 
    "stuff" : "foo" 
    "morestuff": "foo" 
    "evenmore": ["bar", "foo", "baz"] 
} 

Что может быть лучшим способом, чтобы найти все вхождения строки «Foo» (точно, не подстроки), где когда-либо это может произойти? Я хотел бы выполнить обновление всех вхождений строки 'foo' в какую-либо другую строку или удалить ее из документа в коллекции.

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

ответ

1

Там нет запроса, который будет делать это.

Для общего случая вам необходимо перебрать все документы и просмотреть все свойства.

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

name = 'foo' or email = 'foo' or stuff ='foo' 
    or morestuff = 'foo' or evenmore = 'foo' 

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

+0

Спасибо за ответ. Я чувствовал, что нет простого решения, как в РСУБД. Может быть, можно сделать что-то подобное, используя карту/уменьшить? – xlttj

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