0

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

{
  "_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"
4

1 回答 1

1

正如 Sammaye 在评论中所说:

这意味着您的某个文档人口统计数据中的某处为 null 或不存在,您需要先进行 null 检查,但更重要的是,您为什么要在 a 中执行此操作$where

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

使用聚合框架会更好,您可以在其中执行以下操作:

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

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

于 2013-07-31T12:56:03.023 回答