Mongo Map Dot符号

时间:2012-07-31 18:31:54

标签: mongodb

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

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"
    }
}

1 个答案:

答案 0 :(得分:1)

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

尽管如此,事情正在发生变化,你仍然有一些选择:

  1. 使用新的MongoDB Aggregation Framework。这有一个$project操作,可以执行您正在寻找的操作。
  2. 您只能返回classes字段,然后将names合并在一起。对于大多数语言来说,这应该是微不足道的。
  3. 请注意,目前尚不清楚您使用classes做了什么。这是一个数组还是一个对象?如果它是一个对象,classes.1实际代表什么?它与classes.warlock不同吗?