MongoDB之增刪改查(二)

2021-07-04 13:26:40 字數 4236 閱讀 6738

我在上文介紹了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...