Mongodb 條件查詢

來源:互聯網
上載者:User

標籤:http   java   使用   os   資料   io   

1.1 查詢出所有資料的指定鍵(name ,age ,country)

db.persons.find({},{name:1,age:1,country:1,_id:0})

2.查詢條件

2.查詢條件

2.1查詢出年齡在25到27歲之間的學生

db.persons.find({age: {$gte:25,$lte:27},{_id:0,age:1})

2.2查詢出所有不是韓國籍的學生的數學成績

db.persons.find({country:{$ne:”Korea”}},{_id:0,m:1})

3.包含或不包含

$in或$nin

2.3查詢國籍是中國或美國的學生資訊

db.persons.find({country:{$in:[“USA”,“China”]}})

2.4查詢國籍不是中國或美國的學生資訊

db.persons.find({country:{$nin:[“USA”,“China”]}})

4.OR查詢

$or

2.4查詢語文成績大於85或者英語大於90的學生資訊

db.persons.find({$or:[{c:{$gte:85}},{e:{$gte:90}}]},{_id:0,c:1,e:1})

5.Null

把中國國籍的學生上增加新的鍵sex

db.person.update({country:”China”},{$set:{sex:”m”}},false,true)

2.5查詢出sex 等於 null的學生

db.persons.find({sex:{$in:[null]}},{country:1})

6.正則查詢

2.6查詢出名字中存在”li”的學生的資訊

db.persons.find({name:/li/i},{_id:0,name:1})

7.$not的使用

$not可以用到任何地方進行取反操作

2.7查詢出名字中不存在”li”的學生的資訊

db.persons.find({name:{$not:/li/i}},{_id:0,name:1})

$not和$nin的區別是$not可以用在任何地方兒$nin是用到集合上的

8.數組查詢$all和index應用

2.8查詢喜歡看MONGOD和JS的學生

db.persons.find({books:{$all:[“MONGOBD”,”JS”]}},{books:1,_id:0})

2.9查詢第二本書是JAVA的學習資訊

db.persons.find({“books.1”:”JAVA”})

9.查詢指定長度數組$size它不能與比較查詢符一起使用(這是弊端)

2.8查詢出喜歡的書籍數量是4本的學生

db.persons.find({books:{$size:4}},{_id:0,books:1})

2.9查詢出喜歡的書籍數量大於3本的學生

1.增加欄位size

db.persons.update({},{$set:{size:4}},false,true)

2.改變書籍的更新方式,每次增加書籍的時候size增加1

db.persons.update({查詢器},{$push:{books:”ORACLE”},$inc:{size:1}})

3.利用$gt查詢

db.persons.find({size:{$gt:3}})

2.10利用shell查詢出Jim喜歡看的書的數量

var persons = db.persons.find({name:"jim"})

while(persons.hasNext()){

obj = persons.next();

print(obj.books.length)

}

課間小結

1.mongodb 是NOSQL資料庫但是他在文檔查詢上還是很強大的

2.查詢符基本是用到花括弧裡面的更新符基本是在外面

3.shell是個徹徹底底的JS引擎,但是一些特殊的操作要靠他的

各個驅動包來完成(JAVA,NODE.JS)

10.$slice操作符返迴文檔中指定數組的內部值

2.11查詢出Jim書架中第2~4本書

db.persons.find({name:"jim"},{books:{"$slice":[1,3]}})

2.12查詢出最後一本書

db.persons.find({name:"jim"},{books:{"$slice":-1},_id:0,name:1})

11.文檔查詢

為jim添加學習簡曆文檔 jim.json

2.13查詢出在K上過學的學生

1. 這個我們用絕對匹配可以完成,但是有些問題(找找問題?順序?總要帶著score?)

db.persons.find({school:{school:"K",score:"A"}},{_id:0,school:1})

2.為瞭解決順序的問題我可以用對象”.”的方式定位

db.persons.find({"school.score":"A","school.school":"K"},{_id:0,school:1})

3.這樣也問題看例子:

db.persons.find({"school.score":"A","school.school":”J”},{_id:0,school:1})

同樣能查出剛才那條資料,原因是score和school會去其他對象對比

4.正確做法單條條件組查詢$elemMatch

db.persons.find({school:{$elemMatch:{school:"K",score:"A"}}})

12.$where

12.查詢年齡大於22歲,喜歡看C++書,在K學校上過學的學生資訊

複雜的查詢我們就可以用$where因為他是萬能

但是我們要盡量避免少使用它因為他會有效能的代價

db.persons.find({"$where":function(){

var books = this.books;

var school = this.school;

if(this.age > 22){
var php = null;

for ( var i = 0; i < books.length; i++) {
if(books[i] == "C++"){
php = books[i];

if(school){
for (var j = 0; j < school.length; j++) {

if(school[j].school == "K"){

return true;
}
}
break;
}
}

}
}})

二、分頁和排序

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一致快照

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.