在这种情况下如何查询 mongodb

how to query mongodb in this case

我在 collection 中有以下内容:

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

如何在mongodb shell或其他软件中编写查找年龄大于N的地址的命令?

我建议您更改架构并将文档存储在以下结构中:

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

这使得查询变得非常简单直接:

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

当您的文档中的键是高度可变的数据 (names) 时,动态查询几乎不可能。不过,您将能够使用 aggregation framework 查询它,但这是有代价的。只是为了记录,我会 post 聚合查询到您当前的文档结构。

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

查询使用 $redact stage alone and traverses and keeps all the sub documents within a document which meet the criteria in the $cond 表达式。其余的它丢弃。