我有一个包含数据的集合:
{
"_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"
答案 0 :(得分:1)
正如Sammaye在评论中所说:
这意味着您的某个文档中的某个位置人口统计信息为空或不存在,您需要先进行空检查,但更重要的是,为什么要在
$where
中填写此信息?
我会更进一步说,我甚至不会在这里使用Map / Reduce机制。它速度慢,不能使用索引而不能与其他人并行运行。
使用聚合框架可以更好地 ,您可以执行以下操作:
db.doctor.aggregate( [
{ $match: { "demographics.first_name" : 'makdoctest' } },
{ $group: …
您没有在此指定最终目标,但一旦您这样做,我就可以更新答案。