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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值