mongodb,$where内嵌脚本

在使用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内嵌,在这个时候找到了一般查询的内嵌脚本,也算是一个补充了。


猜你喜欢

转载自blog.csdn.net/cherishpart/article/details/52913831