Я предлагаю вам изменить схему и хранить документы в следующей структуре:
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. В остальном он отбрасывает.
Это один документ? – joao