命令CURD

命令概覽

新增

注意寫(xiě)關(guān)注

db.collection.insertOne(
   <document>,
   {
      writeConcern: <document>
   }
)

--- 例子
   db.products.insertOne(
       { "item": "envelopes", "qty": 100, type: "Self-Sealing" },
       { writeConcern: { w : "majority", wtimeout : 100 } }
   );
查詢
  • in查詢
db.inventory.find( { status: { $in: [ "A", "D" ] } } )
SELECT * FROM inventory WHERE status in ("A", "D")

盡管可以使用$or運(yùn)算符表示此查詢,但是 在同一字段上執(zhí)行相等性檢查時(shí)垦缅,請(qǐng)使用$in運(yùn)算符而不是$or運(yùn)算符冲泥。

  • And和比較運(yùn)算
db.inventory.find( { status: "A", qty: { $lt: 30 } } )
SELECT * FROM inventory WHERE status = "A" AND qty < 30

有關(guān)不同BSON類型值的比較,請(qǐng)參見(jiàn)指定的BSON比較順序壁涎。

名稱 描述
$eq 匹配等于指定值的值凡恍。
$gt 匹配大于指定值的值。
$gte 匹配大于或等于指定值的值怔球。
$in 匹配數(shù)組中指定的任何值嚼酝。
$lt 匹配小于指定值的值。
$lte 匹配小于或等于指定值的值竟坛。
$ne 匹配所有不等于指定值的值闽巩。
$nin 不匹配數(shù)組中指定的任何值。
  • or條件
db.inventory.find( { $or: [ { status: "A" }, { qty: { $lt: 30 } } ] } )
SELECT * FROM inventory WHERE status = "A" OR qty < 30
  • 數(shù)組查找
    嚴(yán)格要求數(shù)組順序和元素担汤,有且僅有"red" 和"blank"
db.inventory.find( { tags: ["red", "blank"] } )

忽略順序和其他元素

db.inventory.find( { tags: { $all: ["red", "blank"] } } )

包含一個(gè)元素

db.inventory.find( { tags: "red" } )

多條件匹配
相當(dāng)于or

db.inventory.find( { dim_cm: { $gt: 15, $lt: 20 } } )

相當(dāng)于and,使用$elemMatch運(yùn)算符在數(shù)組的元素上指定多個(gè)條件

db.inventory.find( { dim_cm: { $elemMatch: { $gt: 22, $lt: 30 } } } )

查詢一個(gè)元素的數(shù)組索引位置
下示例查詢dim_cm數(shù)組中第二個(gè)元素大于25的所有文檔:

db.inventory.find( { "dim_cm.1": { $gt: 25 } } )

查詢由數(shù)組的長(zhǎng)度數(shù)組,例如涎跨,以下選擇數(shù)組tags具有3個(gè)元素的文檔 。

db.inventory.find( { "tags": { $size: 3 } } )

查詢嵌套在數(shù)組中的文檔崭歧。需要完全匹配

-- 案例數(shù)據(jù)
db.inventory.insertMany( [
   { item: "journal", instock: [ { warehouse: "A", qty: 5 }, { warehouse: "C", qty: 15 } ] },
   { item: "notebook", instock: [ { warehouse: "C", qty: 5 } ] },
   { item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 15 } ] },
   { item: "planner", instock: [ { warehouse: "A", qty: 40 }, { warehouse: "B", qty: 5 } ] },
   { item: "postcard", instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] }
]);

db.inventory.find( { "instock": { warehouse: "A", qty: 5 } } )

使用數(shù)組索引來(lái)查詢一個(gè)字段中嵌入文檔

db.inventory.find( { 'instock.0.qty': { $lte: 20 } } )

單個(gè)嵌套文檔在嵌套字段上滿足多個(gè)查詢條件

--下面的示例查詢文檔隅很,其中instock數(shù)組具有至少一個(gè)嵌入式文檔,該文檔同時(shí)包含 qty等于5的字段和warehouse等于的字段A:
b.inventory.find( { "instock": { $elemMatch: { qty: 5, warehouse: "A" } } } )

-- 下面的示例查詢文檔率碾,其中instock數(shù)組具有至少一個(gè)嵌入式文檔叔营,該嵌入式文檔包含qty大于10和小于或等于的字段20:
db.inventory.find( { "instock": { $elemMatch: { qty: { $gt: 10, $lte: 20 } } } } )
  • 返回特定字段內(nèi)嵌文件
    The following example returns:
    1屋彪、The _id field (returned by default),
    2、The item field,
    3绒尊、The status field,
    4撼班、The uom field in the size document.
    The uom field remains embedded in the size document.
-- 案例數(shù)據(jù)
db.inventory.insertMany( [
  { item: "journal", status: "A", size: { h: 14, w: 21, uom: "cm" }, instock: [ { warehouse: "A", qty: 5 } ] },
  { item: "notebook", status: "A",  size: { h: 8.5, w: 11, uom: "in" }, instock: [ { warehouse: "C", qty: 5 } ] },
  { item: "paper", status: "D", size: { h: 8.5, w: 11, uom: "in" }, instock: [ { warehouse: "A", qty: 60 } ] },
  { item: "planner", status: "D", size: { h: 22.85, w: 30, uom: "cm" }, instock: [ { warehouse: "A", qty: 40 } ] },
  { item: "postcard", status: "A", size: { h: 10, w: 15.25, uom: "cm" }, instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] }
]);

內(nèi)嵌文件中抑制特定的字段

-- 排除size中uom返回
db.inventory.find(
   { status: "A" },
   { "size.uom": 0 }
)

數(shù)組中字段返回

-- 返回instock數(shù)組中的qty字段
db.inventory.find( { status: "A" }, { item: 1, status: 1, "instock.qty": 1 } )

回?cái)?shù)組中的項(xiàng)目特定數(shù)組元素
以下示例使用$slice投影運(yùn)算符返回instock數(shù)組中的最后一個(gè)元素:

db.inventory.find( { status: "A" }, { item: 1, status: 1, instock: { $slice: -1 } } )
  • null查詢
db.inventory.insertMany([
   { _id: 1, item: null },
   { _id: 2 }
])

-- 以上兩個(gè)語(yǔ)句都匹配
> db.inventory.find( { item: null } )
{ "_id" : 1, "item" : null }
{ "_id" : 2 }

-- The query returns only the document where the item field has a value of null.
> db.inventory.find( { item : { $type: 10 } } )
{ "_id" : 1, "item" : null }

-- 檢查字段是否存在
> db.inventory.find( { item : { $exists: false } } )
{ "_id" : 2 }

修改
  • 更新單個(gè)文檔
    更新第一個(gè)item='paper'的文檔
  • 使用$set操作員更新的值 size.uom字段"cm"和值status 字段"P"
  • 使用$currentDate運(yùn)算符將lastModified字段的值更新為當(dāng)前日期垒酬。如果 lastModified字段不存在, $currentDate將創(chuàng)建該字段件炉。有關(guān)$currentDate詳細(xì)信息勘究,請(qǐng)參見(jiàn) 。
client[:inventory].update_one({ item: 'paper'},
                              { '$set' => { 'size.uom' => 'cm', 'status' => 'P' },
                                '$currentDate' => { 'lastModified' => true } })
  • 更新多個(gè)文檔
    更新qty小于50的所有文檔
client[:inventory].update_many({ qty: { '$lt' => 50 } },
                              { '$set' => { 'size.uom' => 'in', 'status' => 'P' },
                                '$currentDate' => { 'lastModified' => true } })
  • 替換文檔
    要替換除_id 字段以外的文檔的所有內(nèi)容斟冕,請(qǐng)將一個(gè)全新的文檔作為第二個(gè)參數(shù)傳遞給 replace_one()
    替換文檔可以具有與原始文檔不同的字段口糕。在替換文檔中,_id由于該_id字段是不可變的磕蛇,因此可以省略該字段景描;但是,如果您包含該_id字段秀撇,則該 字段必須與當(dāng)前值具有相同的值超棺。
client[:inventory].replace_one({ item: 'paper' },
                               { item: 'paper',
                                 instock: [ { warehouse: 'A', qty: 60 },
                                            { warehouse: 'B', qty: 40 } ] })
刪除
  • 批量寫(xiě)入和重試
    分為有序和無(wú)序批量寫(xiě)入,使用第二個(gè)參數(shù){ ordered : false } 控制呵燕,默認(rèn)有序
try {
   db.characters.bulkWrite(
      [
         { insertOne :
            {
               "document" :
               {
                  "_id" : 4, "char" : "Dithras", "class" : "barbarian", "lvl" : 4
               }
            }
         },
         { insertOne :
            {
               "document" :
               {
                  "_id" : 5, "char" : "Taeln", "class" : "fighter", "lvl" : 3
               }
            }
         },
         { updateOne :
            {
               "filter" : { "char" : "Eldon" },
               "update" : { $set : { "status" : "Critical Injury" } }
            }
         },
         { deleteOne :
            { "filter" : { "char" : "Brisbane"} }
         },
         { replaceOne :
            {
               "filter" : { "char" : "Meldane" },
               "replacement" : { "char" : "Tanys", "class" : "oracle", "lvl" : 4 }
            }
         }
      ]
   );
}
catch (e) {
   print(e);
}

SQL到MongoDB的映射圖

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末棠绘,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子再扭,更是在濱河造成了極大的恐慌氧苍,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泛范,死亡現(xiàn)場(chǎng)離奇詭異让虐,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)罢荡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)赡突,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人柠傍,你說(shuō)我怎么就攤上這事麸俘。” “怎么了惧笛?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵从媚,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我患整,道長(zhǎng)拜效,這世上最難降的妖魔是什么喷众? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮紧憾,結(jié)果婚禮上到千,老公的妹妹穿的比我還像新娘。我一直安慰自己赴穗,他們只是感情好憔四,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著般眉,像睡著了一般了赵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上甸赃,一...
    開(kāi)封第一講書(shū)人閱讀 51,258評(píng)論 1 300
  • 那天柿汛,我揣著相機(jī)與錄音,去河邊找鬼埠对。 笑死络断,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的项玛。 我是一名探鬼主播貌笨,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼稍计!你這毒婦竟也來(lái)了躁绸?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤臣嚣,失蹤者是張志新(化名)和其女友劉穎净刮,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體硅则,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡淹父,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了怎虫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暑认。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖大审,靈堂內(nèi)的尸體忽然破棺而出蘸际,到底是詐尸還是另有隱情,我是刑警寧澤徒扶,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布粮彤,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏导坟。R本人自食惡果不足惜屿良,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望惫周。 院中可真熱鬧尘惧,春花似錦、人聲如沸递递。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)登舞。三九已至重慢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間逊躁,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工隅熙, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留稽煤,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓囚戚,卻偏偏與公主長(zhǎng)得像酵熙,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子驰坊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354