如何在MongoDB中返回嵌套键的值?

时间:2014-05-26 15:30:40

标签: mongodb

该集合名为"baseCharges"

{
    photos: {
        under1500: 100,
        between1501_2000: 125,
        between2001_3000: 150,
        between3001_4000: 175,
        between4001_5000: 275,
        between5001_6000: 375,
        between6001_7000: 475,
        between7001_8000: 575,
        between8001_9000: 675,
        between9001_10000: 775,
        between10001_11000: 875
    },
    twilights: {
        under1500: 100,
        between1501_2000: 125,
        between2001_3000: 150,
        between3001_4000: 175,
        between4001_5000: 275,
        between5001_6000: 375,
        between6001_7000: 475,
        between7001_8000: 575,
        between8001_9000: 675,
        between9001_10000: 775,
        between10001_11000: 875
    },
    _id: "B8RCdQp8kuL9r6KdT"
}

我想要返回的只是baseCharges.photos.under1500

的值

我想查询密钥并让它返回" 100"作为,我可以将其存储在变量中,而不是指针。

我已经检查了MongoDB上的其他线程,但没有任何对我有用。

db.baseCharges.find({ "photos.under1500" : 1 })

不起作用。

db.baseCharges.find("photos.under1500")

不起作用。

db.baseCharges.findOne({"photos.under1500" : 1 })

为空

2 个答案:

答案 0 :(得分:2)

你好像很亲密。我不太确定你的价值回报是什么意思,所以这可能是回答了错误的问题,但你可以得到所需的数据,只是在你的发现中添加一个(在这种情况下)空状态。您现有的查询缺少搜索条件部分。

db.baseCharges.find({}, { _id:0, "photos.under1500" : 1 })

这将返回您想要的字段(没有条件,即所有条目)

编辑:如果你想要一个值(来自第一个/单个结果行),你需要从游标find()返回第一个文件,并使用点符号来获得你需要的东西;

db.baseCharges.find().next().photos.under1500

答案 1 :(得分:0)

我找到了另一种方法。

此集合baseCharges只有一个条目,因此以下代码有效:

db.baseCharges.findOne().photos.under1500

我的问题是我不习惯使用MongoDB单一项目的工作方式。

我知道,对于包含多个条目的集合,我必须首先通过find或独特的条件组合执行_id以开始深入挖掘数据。

但是因为这个系列只有一个条目,所以我认为我可以用一种直接的分层方式来做。只有一个条目。不应该使用ID,因此我认为只需执行db.baseCharges.photos.under1500即可。

但这不是它的工作方式。即使集合中只有一个条目,您仍然需要find,然后深入查看所需的数据。