mongodb,$where內嵌指令碼
阿新 • • 發佈:2019-02-13
在使用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內嵌,在這個時候找到了一般查詢的內嵌指令碼,也算是一個補充了。