检索子文档时使用点表示法

时间:2013-08-09 00:45:58

标签: mongodb

我使用此方案存储一些文档:

{
  "_id": ObjectId("..."),
  "param0": "value0",
  "status": {
    "param1": "value1",
    "param2": "value2",
    "param3": "value3"
  }
}

..当我请求子文档中的某些字段时

db.collection.find({}, {"param0": 1, "status.param1": 1, "status.param3": 1})

..它返回实际使用的嵌套对象:

{
  "_id": ObjectId("..."),
  "param0": "value0",
  "status": {
    "param1": "value1",
    "param3": "value3"
  }
}

是否可以像这样检索它?

{
  "_id": ObjectId("..."),
  "param0": "value0",
  "status.param1": "value1",
  "status.param3": "value3"
}

2 个答案:

答案 0 :(得分:1)

是的,看看the docs

这个例子反映了你的需要:

db.inventory.find({
  producer: {
    company: 'ABC123',
    address: '123 Street'
  }
})

db.inventory.find({'producer.company': 'ABC123'})

答案 1 :(得分:1)

如果您使用聚合框架转换文档,则可以非常接近您想要的内容:

db.collection.aggregate({
    $project:{
        param0: 1,
        status_param1: "$status.param1",
        status_param3: "$status.param3"
    }
})

这会给你一个这样的结果:

{
"result" : [
    {
        "_id" : ObjectId("5207908547bbc806a99c5198"),
        "param0" : "value1",
        "status_param1" : "value1",
        "status_param3" : "value3"
    }
],
"ok" : 1
}

希望你能够使用这种类型的结果。

有关mongodb project aggregator

的更多信息