在这种情况下如何查询mongodb

时间:2015-02-06 01:56:34

标签: mongodb find

我在该集合中有以下内容:

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

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

1 个答案:

答案 0 :(得分: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表达式条件的文档中的所有子文档。剩下的就丢弃了。