$ Where给出错误

时间:2013-07-31 12:40:49

标签: mongodb mongo-java

我有一个包含数据的集合:

{
  "_id" : ObjectId("51dfb7abe4b02f15ee93a7c7"),
  "date_created" : "2013-7-12  13:25:5",
  "referrer_id" : 13,
  "role_name" : "Physician",
  "status_id" : "1",

}

我发送的查询:

cmd {
    "mapreduce" : "doctor" ,
    "map" : "function map(){emit(this._id,this);}" ,
    "reduce" : "function reduce(key,values){return values;}" ,
    "verbose" : true ,
    "out" : { "merge" : "map_reduce"} ,
    "query" : { "$where" : "this.demographics.first_name=='makdoctest'"}
}

我收到的错误是:

"errmsg" : "exception: count failed in DBDirectClient: 10071 error on invocation of $where function:\nJS Error: TypeError: this.demographics has no properties nofile_a:0"

1 个答案:

答案 0 :(得分:1)

正如Sammaye在评论中所说:

  

这意味着您的某个文档中的某个位置人口统计信息为空或不存在,您需要先进行空检查,但更重要的是,为什么要在$where中填写此信息?

我会更进一步说,我甚至不会在这里使用Map / Reduce机制。它速度慢,不能使用索引而不能与其他人并行运行。

使用聚合框架可以更好地 ,您可以执行以下操作:

db.doctor.aggregate( [
    { $match: { "demographics.first_name" : 'makdoctest' } },
    { $group: …

您没有在此指定最终目标,但一旦您这样做,我就可以更新答案。