MongoDB(5)文檔 CRUD 操作

來源:互聯網
上載者:User
MongoDB 入門專欄

http://blog.csdn.net/column/details/19681.html


MongoDB 文檔 CRUD 操作
查詢文檔 基本使用 mongodb 查詢文檔的文法如下:  

db.collection_name.find(query, projection)           # 以壓縮格式返回資料
db.collection_name.find(query, projection).pretty()  # 以易讀格式返回資料
query:可選,使用查詢操作符指定查詢條件;
projection:可選,使用投影操作符指定返回的鍵,如果需要返迴文檔中所有的鍵,只需要省略該參數;  
# 查詢 testdb.artciles 集合中的所有文檔
> use testdb
> db.articles.find().pretty()    
 
# 查詢 testdb.articles 集合中 author='assad' 的文檔
> db.atricles.find( { author:'assad' } )

query 條件操作符

操作符

含義和文法 樣本
比較查詢符
: 等於(=);
{ <key>:<value> }
db.col.find( { name:'assad' } )
查詢 name='assad' 的文檔
$ne 不等於(!=);
{ <key>:{$ne:<value>} }
db.col.find( { name:{$ne:'assad'} } )
查詢 name!='assad' 的文檔
$lt 小於(<):
{ <key>:{$lt:<value>} }
db.col.find( { score:{$lt:120} } )
查詢 score>120 的文檔
$gt 大於(>);
{ <key>:{$gt:<value>} }
db.col.find( { score:{$gt:120} } )
查詢 score<120 的文檔
$lte 小於等於(<=);
{ <key:{$lte:<value>} }
db.col.find( { score:{$lte:120} } )
查詢 score<=120 的文檔
$gte 大於等於(>=);
{ <key>:{$gte:<value>} }
db.col.find( { score:{$gte:120} } )
查詢 score>= 120 的文檔
邏輯關係查詢符
$and  and 和關係;
{ $and:[query1, query2] }
{ query1, query2 }
db.col.find( { $and:[{city:'guangzhou'}, { score:{$gt:250} }] })
db.col.find( { city:'guangzhou',  score:{$gt:250} } 
查詢 city='guangzhou' and core>250 的文檔 
$or or 或關係;
{ $or:[query1, query2] }
db.col.find( { $or:[{city:'guangzhou'}, { score:{$gt:250 }}] })
查詢 city='guangzhou' or core>250 的文檔 
$nor nor 異或關係;
{ $nor:[query1, query2] }
db.col.find( { $nor:[{city:'guangzhou'}, { score:{$gt:250 }}] })
查詢 (city='guangzhou' or core<=250) and (city!='guangzhou' and core > 250)的文檔 
$not 非關係;
{ $not:{query} }
db.col.find( { $not:{city:'guangzhou'} })
查詢 city!= 'guanhgzhou' 的文檔
成員關係查詢符
$all 查詢 key 匹配指定數組中的所有成員的結果;
{ <key>:{$all:[ array ]} }
db.col.find( { tages:{$all:['java','cpp','linux']} } )
查詢 tages 欄位數組中含有 'java','cpp','linux' 全部這些值的文檔
$in  查詢 key 匹配指定數組中任一個成員的結果;
{ <key>:{$in:[ array ]} }
db.col.find( { tages:{$in:['java','cpp','linux']} } )
查詢 tages 欄位數組中含有 'java','cpp','linux' 中任意一個值的文檔
$nin 查詢 key 不匹配指定數組中任一個成員的結果;
{ <key>:{$in:[ array ]} }
db.col.find( { tages:{$in:['java','cpp','linux']} } )
查詢 tages 欄位數組中不含有 'java','cpp','linux' 的文檔
. 查詢 key 指定下標成員,index從0開始;
{ <key.index>:query}
db.col.find( { tages.1:‘java’ } )
查詢 tages 欄位數組第 2 個元素 = ‘java' 的文檔
值屬性查詢符
$size 查詢指定長度的數組
{ <key>:{$size:value} }
db.col.find( { tages:{$size:3} } )
查詢 tages 欄位數組長度為 3 的文檔,可以結合比較查詢符使用
$type 查詢指定類型的 key,具體類型列表見:
https://docs.mongodb.com/manual/reference/operator/query/type/index.html
{ <key> :{$type: typecode} }
db.col.find( { title:{$type:2 } } )
查詢 title 類型為 String 的文檔
$exits 查詢指定存在條件的 key 的文檔
{ <key>:{$exists:<boolean>} }
db.col.find( { school:{$exits:false} } )
查詢不存在 school 欄位的所有文檔
null 其實不是操作符,是作為空白值的預留位置
{ <key>:null }
{<key>:{$in:[null]} }
db.col.find( { school:null } )
查詢 school 欄位不存在,或者 school 欄位值為空白的文檔
db.col.find( { school:{$in:[null], $exists:true} } )
查詢 school 欄位存在,但是值為空白的文檔
$regex 對字串進行正則匹配,使用perl相容運算式,可以用達到類似 SQL like 子句的效果;
{ <key>:{$regex:pattern, $options:ops} }

其中 $options 用於修飾 regex,參數如下:
-i:忽略大小寫;
-x:強制對沒有標註 \n 的字串分行;
- s:pattern 中的點號匹配所有字元(包括分行符號);
-x:忽略 pattern 中沒有轉義的特殊字元;
db.col.find( { name:{$regix:"^a*"} } )
db.col.find( { name:/^a*/ } } )
查詢 name 以 a 開頭的文檔

db.col.find( { name:{$regex: "^a*", $options:'i'}} )
db.col.find( { name:/^a*/i })
查詢 name 以 a 開頭的文檔,或略大小寫
$where 使用任意 JavaScript 作為查詢的一部分,包括 Js 運算式和 Js 閉包;
{ $where: javascript-operation }
在Js 運算式中,使用 this,obj 指代每個文檔對象
db.col.find( { $where: "this.score > this.salary " } )
db.col.find( { $where: "obj.score = this.salary" } )
db.col.find( { $where:function() {return (this.score > this.salary )} } )
查詢 col 中所有 score > salary 的文檔;

 
> use testdb
# 查詢 testdb.articles 集合中 author="assad" 的文檔
> db.articles.find( { author:'assad' } )
 
# 查詢 likes > 1000 的文檔
> db.articles.find( { likes:{$gt:1000} } )
 
# 查詢 likes 大於 1000 ,小於 1500 的文檔
> db.artciles.find( { likes:{$gt:1000, $lt:1500} } )
 
# 查詢 author="assad" 同時 likes > 2000 的文檔
> db.articles.find( { author:'assad', likes:{$gt:2000} } )
 
# 查詢 authoer="assad" 或 "vancy" 的文檔
> db.articles.find( { author:{$in:['assad','vancy']} } )
 
# 查詢 tages 數組同時含有 'java','groovy' 的文檔
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.