我在上文介紹了mongodb的增加、刪除還有修改的基本操作,這裡介紹下查詢的一些方法。
最基本的就是find和findone方法了。find會返回集合裡面所有的文件,如果只想檢視乙個文件,可以用findone。使用find的時候,shell自動最多顯示20個匹配文件。
mongodb使用find來進行查詢.查詢就是返回乙個集合中文件的子集,子集合的範圍從0個文件到整個集合。
find的第乙個引數決定了要返回哪些文件.其形式也是乙個文件,說明要查詢的細節。空的查詢文件{}會匹配集合的全部內容.要是不指定查詢文件,預設是{}。如:db.person.find()返回集合person中的所有內容。向查詢文件中新增鍵值對,就意味著新增了查詢條件。對絕大多數型別來說,整數匹配整數,布林型別匹配布林型別,字串匹配字串。
有時候我們並不需要將文件中所有的鍵值都返回,這時我們就可以通過find或findone的第二個引數來指定要返回的鍵。這樣既節省了傳輸的資料量,又節省了客戶端解碼文件的時間和記憶體消耗。
如下例,只將id,age,***屬性返回:
也可以利用第二個引數來剔除查詢結果中的某個鍵值對,例如:
鍵name不會顯示在返回結果中:
db.person
.findone(,)
只將age和***返回,id也不返回:
db.person
.findone(,)
mongodb的語法不似sql,它的條件判斷全部是由**來實現而不是符號。
mongodb
sql$lt
<
$lte
<=
$gt>
$gte
>=
$ne!=
$inbetween
$nin
not between
$or無
$not
not$size
無$slice
無如:
查詢年齡》=18 <=30:
方法如下:
db.person.find(})
再比如日期的查詢,先向文件中新增鍵birthday,
db.person.update(
, })
查詢birthday日期是1990-1-1之後的人:
db.person.find(})
查出所有name不等於lf的文件,其中集合中不存在name的文件也會被查出來:
db.person
.find(})
$in可以用來查詢範圍內的值,例如:查詢出pageviews為10000,20000的資料:
db
.person
.find(})
$in還可以用來指定不同型別的條件和值,如正在將使用者的id號遷移成使用者名稱的過程中,要做到兩者兼顧的查詢:
db.person
.find(})
這樣會匹配user_id為12345和lf的文件。
如果$in中只有乙個值,就和直接匹配這個值的效果一樣:
db.person
.find(})
db.person
.find()
$nin可以返回與陣列中所有條件不匹配的文件。
如:查出所有pageviews不等10000,20000的文件,注意 文件中不存在鍵pageviews的文件也會被查出來:
db.person
.find(})
$or是用來返回或結果的,只要滿足條件陣列中任意一條,都將返回:
db.person.find(},]
})
將查詢出pageviews是10000,20000或url是的文件。
$not可以用在任何條件之上:
db.users
.find(}})
$size 可以用來查詢指定長度的陣列:
db.person
.find(})
這裡需要注意一點的是,$size方法不能和其他查詢子句結合使用,
比如$gt,所以我們可以採用另外一種方式,就是給每個陣列所在文件定義乙個size鍵,
將原來的陣列新增操作:
db.person.update(})
改為:
db.person.update(,"$inc":})
這樣就可以查詢了:
db.person
.find(})
$slice用來返回陣列的子集合,
例如 :
返回emails陣列的前兩個元素
db.person
.find(,})
返回emails陣列的後兩個元素
db.person
.find(,})
返回emails陣列的第2個和第11個元素.如果陣列不夠11個,則返回第2個後面的所有元素
db.person
.find(,})
和關係型資料庫一樣,mongodb也支援正規表示式查詢,從而靈活有效的匹配字串。
mongodb的查詢是不輸於關係型資料庫的,其查詢條件的複雜用法遠不是上文就全部涵蓋得了的,想要掌握的全面透徹還得進一步研究。
下面說說內嵌文件的查詢,眾所周知,nosql儲存文件的工作模式代表了其資料模型可以非常的複雜和靈活,那麼查詢起來會不會有困難呢?
有兩種方法查詢內嵌文件:查詢整個文件,或者只針對其鍵值對進行查詢。
查詢整個內嵌文件的方法和普通查詢相同:
db.person
.insert(
, "age":23
})
查詢姓名為name的文件
db.person
.find(})
但是
db.person
.find(})
這樣不能查詢出文件.
所以最好通過內嵌文件的特定的鍵值來進行查詢。這樣即便資料模型改變,也不會導致查詢失效:
db.person
.find()
db.person
.find()//這個也可以查出文件.
通過.操作符一步一步內嵌文件,是不是很方便呢?當文件結構變得更加複雜後,內嵌文件的匹配更加需要技巧:
db.person
.insert(
, ]})
db.person
.find(}})
點操作符同樣得不到結果:
db.person
.find(
})
db.person.find(}}
})
$elemmatch將限定條件進行分組,僅當需要對乙個內嵌文件的多個鍵操作時才會用到。
mongodb增刪改查
1 mongodb插入資料 db.表名.insert 2 新增乙個欄位.table 代表表名 新增字段 content,字串型別。db.table.update 3 給指定範圍內的記錄新增字段 lt表示小於,lte表示小於等於,gt表大於,gte表示大於等於,timestamp是我表中的乙個時間戳字...
MongoDB 三 增刪改查
2,查詢也是一樣,看一下知識點的彙總,其實用幾個,還是有規律的,比較容易記錄的 3,看一下固定集合 顧名思義是有著固定大小的集合,其優點是效能比較出色,以 lru least recently used 最近最少使用 規則和插入順序進行 age out 老化移出 處理。由於集合空間大小一定,當空間用...
mongodb增刪改查基本操作
mongodb資料庫基本用法 查詢 1.條件操作符的使用,日期格式的查詢,長度 db.getcollection interougeproduct find interougestockmaps 2.查詢列只顯示指定字段 1 表示展示,0表示隱藏 db.getcollection interouge...