在Mongo中都知道字符串類型大小比較都是以ASCII進行比較的,因此沒法真實比較字符串類型的數值大小
好比查詢age大於3的:
db.getCollection('ddzinttest').find({"age":{$gt:"3"}})
獲得的結果確定不是咱們所須要的
那麼這種問題該怎麼解決呢。Mongo中有一種**$where**查詢,這種查詢是能夠解決這樣需求,數組
db.getCollection('ddzinttest').find({"$where":"this.age>3"})
能夠看到使用**$where**是能夠達到這個需求的,那**
$where**這東西是什麼呢:
其實
$where查詢是將
JavaScript表達式的字符串或函數做爲查詢的一部分,
Mongo是支持JS語言的,也就是說能夠在Mongo中使用JS函數,也就是說其實語句能夠這麼寫
db.getCollection('ddzinttest').find({$where:function(){return this.age>3}})
而
this.age>3是字符串形式的表達方式
固然能夠利用JS函數寫一些更加複雜的查詢:例如子文檔中字符串的比較查詢
db.getCollection('ddzinttest').find({$where:function(){ for(var i =0;i<this.Child.length;i++){ var currentChild=this.Child[i]; if(currentChild.key==='123'&¤tChild.value>'111'){ return true; } } return false; }})
查詢子文檔數組Child中key等於123而且value大於111的數據函數
固然,這種複製的就不能使用字符串表達式了。this