在使用mongodb的时候,有遇到这种情况,查找某个字段长度大于10的记录。
由于mongodb是json文档结构,要找出有问题的数据也不容易,
有些情况下,可以划分为垃圾数据,
1、一些字段的长度超出不正常范围的时候。
2、类型与你预想的不一致,如应该为NumberInt的字段,有字符串,或者其他类型。
这些情况下我们可以使用$where将这些记录筛选出来。
一、shell脚本的方式
var cursor = db.d_goods.find(
{"$where":function(){
var specification = this.specification;
//返回这个字段不是string类型的记录
if(specification!=null && typeof specification!='string'){
return true;
}
//返回字段不为空且字符串长度大于10的记录
//return this.specification!=null&&this.specification.length>10;
}
});
//打印结果记录
while(cursor.hasNext()){
var goods = cursor.next();
printjson(goods);
}
这样就将specification字段有问题的记录找出来了。
二、morphia方式
在使用java调用morphia的时候,意外注意到Query<T> 中有where()函数:
Query<T> where(CodeWScope js);
Query<T> where(String js);
这是个好消息,意味着上面我们可以对上面的shell脚本进行morphia改装了,我之前的博客有一篇是分组聚合查询,js内嵌,在这个时候找到了一般查询的内嵌脚本,也算是一个补充了。