標籤:blog 使用 java ar 資料 div 問題 log sp
//$slice操作符返迴文檔中指定數組的內部值//查詢出Jim書架中第2~4本書db.persons.find({name:"jim"},{books:{"$slice":[1,3]}})//查詢出最後一本書db.persons.find({name:"jim"},{books:{"$slice":-1},_id:0,name:1})//查詢出在K上過學的學生//這個我們用絕對匹配可以完成,但是有些問題(找找問題?順序?總要帶著score?)db.persons.find({school:{school:"K",score:"A"}},{_id:0,school:1})//為瞭解決順序的問題我可以用對象”.”的方式定位db.persons.find({"school.score":"A","school.school":"K"},{_id:0,school:1})//db.persons.find({"school.score":"A","school.school":”J”},{_id:0,school:1})//正確做法單條條件組查詢$elemMatchdb.persons.find({school:{$elemMatch:{school:"K",score:"A"}}})分頁和排序1.Limit返回指定的資料條數1.1查詢出persons文檔中前5條資料db.persons.find({},{_id:0,name:1}).limit(5)2.Skip返回指定資料的跨度2.1查詢出persons文檔中5~10條的資料db.persons.find({},{_id:0,name:1}).limit(5).skip(5)3.Sort返回按照年齡排序的資料[1,-1]db.persons.find({},{_id:0,name:1,age:1}).sort({age:1})注意:mongodb的key可以存不同類型的資料排序就也有優先順序mongodb的key可以存不同類型的資料排序就也有優先順序最小值null數字字串對象/文檔數組二進位對象ID布爾日期遊標利用遊標遍曆查詢資料var persons = db.persons.find();while(persons.hasNext()){obj = persons.next();print(obj.name)}遊標幾個銷毀條件1.用戶端發來資訊叫他銷毀2.遊標迭代完畢3.預設遊標超過10分鐘沒用也會別清除3.查詢快照查詢快照db.persons.find({$query:{name:"Jim"},$snapshot:true})
二、分頁和排序
1.Limit返回指定的資料條數
1.1查詢出persons文檔中前5條資料
db.persons.find({},{_id:0,name:1}).limit(5)
2.Skip返回指定資料的跨度
2.1查詢出persons文檔中5~10條的資料
db.persons.find({},{_id:0,name:1}).limit(5).skip(5)
3.Sort返回按照年齡排序的資料[1,-1]
db.persons.find({},{_id:0,name:1,age:1}).sort({age:1})
注意:mongodb的key可以存不同類型的資料排序就也有優先順序
最小值
null
數字
字串
對象/文檔
數組
二進位
對象ID
布爾
日期
時間戳記à正則 à最大值
4.Limit和Skip完成分頁
4.1三條資料位元一頁進行分頁
第一頁àdb.persons.find({},{_id:0,name:1}).limit(3).skip(0)
第二頁àdb.persons.find({},{_id:0,name:1}).limit(3).skip(3)
4.2skip有效能問題,沒有特殊情況下我們也可以換個思路
對文檔進行重新解構設計
每次查詢操作的時候前後台傳值全要把上次的最後一個文檔的日期儲存下來
db.persons.find({date:{$gt:日期數值}}).limit(3)
個人建議à應該把軟體的中點放到便捷和精確查詢上而不是分頁的效能上
因為使用者最多不會翻查過2頁的
三、遊標
利用遊標遍曆查詢資料
var persons = db.persons.find();
while(persons.hasNext()){
obj = persons.next();
print(obj.name)
}
2.遊標幾個銷毀條件
1.用戶端發來資訊叫他銷毀
2.遊標迭代完畢
3.預設遊標超過10分鐘沒用也會別清除
3.查詢快照
快照後就會針對不變的集合進行遊標運動了,看看使用方法.
db.persons.find({$query:{name:”Jim”},$snapshot:true})
進階查詢選項
$query
$orderby
$maxsan:integer最多掃描的文檔數
$min:doc 查詢開始
$max:doc 查詢結束
$hint:doc 使用哪個索引
$explain:boolean 統計
$snapshot:boolean一致快照
MongoDB 使用Limit和Skip完成分頁 和遊標(二)