2015-02-06 2 views
1

Я следующий содержание в коллекции:как запросить MongoDB в данном случае

{ 
    "Tom": { 
    "age": 20, 
    "address": "xxx" 
    }, 
    "John": { 
    "age": 23, 
    "address": "xxx" 
    }, 
    ... 
} 

Как написать команду в MongoDB оболочке или другую часть программного обеспечения, чтобы найти адрес людей, чей возраст больше, чем N?

+0

Это один документ? – joao

ответ

0

Я предлагаю вам изменить схему и хранить документы в следующей структуре:

db.t.insert([{ 
"name":"Tom", 
"age":20, 
"address":"address1" 
}, 
{ 
"name":"John", 
"age":23, 
"address":"address2" 
}]) 

Это делает запрос очень просто и прямо вперед:

db.t.find({"age":{$gt:20}}) 

Если у вас есть документы, где ключи являются очень переменными данными (names), становится почти невозможно запросить динамически. Вы сможете запросить его, используя aggregation framework, хотя это стоит дорого. Только для записей я бы поставил запрос агрегации в вашу текущую структуру документа.

var age = 20; 
db.t.aggregate([ 
{$redact:{$cond:[{$gt:[{$ifNull:["$age",age+1]},age]}, 
       "$$DESCEND","$$PRUNE"]}} 
]) 

Запрос использует $redact стадии одни и траверсы и сохраняет все вложенные документы в документе, которые отвечают критериям, указанным в выражении $cond. В остальном он отбрасывает.

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