获取mongodb中_id字段的明确值

时间:2014-03-12 17:44:28

标签: mongodb

我有一个集合,它是map_reduce的结果,看起来像这样。

[
  {
    _id: { id_field1: 'id_field_value1', ... }
    value: { value_field1: 'value_field_1' }
  },
  ...     
]

现在我想获得_id.field1的不同值 但

collection.distinct('_id.id_field1') 

返回一个空列表。

如果我这样做

collection.distinct('value.value_field1') 

我得到了预期的结果。 (请指出:MongoDB: How to get distinct list of sub-document field values?

我有什么理由可以从文档的ID中找出不同的值吗?

编辑: 蒙戈2.5.5 实际文件

 db.collection.findOne()

 { _id : { year : 2013, month : 11, date : 2, language : en-US},
   value : { sentence_eval : { Num : 36, PerfectMatch : 33} }
 }
db.collection.distinct('value.sentence_eval.Num)
[36,...]
db.collection.distinct('_id.language')
[]

2 个答案:

答案 0 :(得分:1)

我尝试了与您拥有的相同集合的相同查询,而distinct()确实返回了预期值。请看下面。

顺便说一句,_id.language的值必须用双引号括起来。我希望你输入的是一个错字。

> db.bar.findOne()
{
        "_id" : {
                "year" : 2013,
                "month" : 11,
                "date" : 2,
                "language" : "en-US"
        },
        "value" : {
                "sentence_eval" : {
                        "Num" : 36,
                        "PerfectMatch" : 33
                }
        }
}
> db.bar.distinct("value.sentence_eval.Num")
[ 36 ]
> db.bar.distinct("value.sentence_eval.PerfectMatch")
[ 33 ]
> db.bar.distinct("_id.year")
[ 2013 ]
> db.bar.distinct("_id.language")
[ "en-US" ]

答案 1 :(得分:0)

mongodb的2.5.5版似乎有这个bug。 我用2.4.9和2.6RC1验证它现在正在按预期工作。所以更新mongodb解决了这个问题。