0

我使用这个方案来存储一些文档:

{
  "_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"
}
4

2 回答 2

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项目聚合器的更多信息

于 2013-08-11T13:35:55.333 回答
1

是的,看看文档

从那里获取的示例反映了您的需求:

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

db.inventory.find({'producer.company': 'ABC123'})
于 2013-08-09T00:56:07.000 回答