1

我想构造一个查询,它只返回下面数据结构的类的名称。到目前为止,我最接近的是使用点表示法

db.mycoll.find({name:"game1"},{"classes.1.name":true})

但是这种方法的问题是它只会返回第一个类的名称。请帮助我获取所有三个班级的名称。

我希望我可以使用如下通配符,但我不确定是否存在。

db.mycoll.find({name:"game1"},{"classes.$*.name":true})

数据结构:

{
"name" : "game1",
"classes" : {
    "1" : {
        "name" : "warlock",
        "version" : "1.0"
    },
    "2" : {
        "name" : "shaman",
        "version" : "2.0"
    },
    "3" : {
        "name" : "mage",
        "version" : "1.0"
    }
}
4

1 回答 1

1

没有简单的查询可以达到您寻求的结果。MongoDB 对查询子对象或对象数组的支持有限。MongoDB 的基本前提是您正在查询顶级文档。

也就是说,事情正在发生变化,您仍然有一些选择:

  1. 使用新的MongoDB 聚合框架。这有一个$project应该做你正在寻找的操作。
  2. 您可以只返回该classes字段,然后将它们合并names在一起。对于大多数语言来说,这应该是微不足道的。

请注意,目前尚不清楚您在做什么classes。这是一个数组还是一个对象?如果它是一个对象,它classes.1实际上代表什么?它与 不同classes.warlock吗?

于 2012-07-31T20:07:55.857 回答