日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

mongo基础---增删改查

發布時間:2024/10/12 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mongo基础---增删改查 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

正文

MongoDB?是一個基于分布式文件存儲的數據庫。由C++語言編寫。旨在為WEB應用提供可擴展的高性能數據存儲解決方案。MongoDB是一個介于關系型數據庫和非關系數據庫之間的產品,是非關系數據庫當中功能最豐富,最像關系數據庫的。他支持的數據結構非常松散,是類似Json格式,因此可以存儲比較復雜的數據類型。Mongo最大的特點是他支持的查詢語言非常強大,其語法有點類似于面向對象的查詢語言,幾乎可以實現類似關系數據庫單表查詢的絕大部分功能,而且還支持對數據建立索引----【來源百度百科】

一、Mongo的查詢語句

公式:

db.collection.find({query filter},{projection})

解釋:

  • query filter:查詢的條件,類似于MySql中的where語句;可多選
  • projection:列出要查詢的數據,可選值為1、0;其中1表示展示,0表示不展示;其中_id屬性默認是展示;可多選
  • collection:表示要查詢的集合(本文所有例子中默認為app集合)

例子:

  • 查詢所有:db.app.find({})
  • 部分查詢:db.app.find({_id:3})
  • 鍵的篩選:db.app.find({},{name:1,_id:0})

說明:

鍵的篩選是查詢時只返回自己感興趣的鍵值,通過指定projection來實現。可以節省傳輸的數據量,又能節省客戶端解碼文檔的時間和內存消耗。?

查詢條件:

  • 比較查詢:通過$lt,$lte,$gt,$gte,$ne來實現,分別對應<,<=,>,>=,!=;它們可以組合起來以查找一個范圍內的值
  • 關聯查詢:通過$in,$nin,$or實現,分別對應在某一個集合中、不在某一個集合中(此處集合與collection集合不同,可以理解成一個鍵的多個值所組成的數學形式上的集合)以及或邏輯

例子:

  • 查詢_id鍵在20與60之間:db.app.find({_id:{$gt:20,$lt:60}})
  • 查詢_id鍵不為16的所有數據:db.app.find({_id:{$ne:16}})
  • 查詢_id鍵在[1,3,6,7]中的數據:db.app.find({_id:{$in:[1,3,6,7]}})
  • 查詢_id鍵為16或者name為訊飛輸入法的數據:db.app.find({$or:[{_id:16},{name:"訊飛輸入法"}]})

特殊類型的查詢:

  • 查詢null:db.app.find({name:{$in:[null]}});查詢所有name為null的數據或者name不存在的數據
  • 正則查詢:mongo不直接支持模糊查詢,但是可以通過正則表達式去實現模糊查詢,例如:查詢所有app的name以訊飛開頭的所有數據:db.app.find({name:/^訊飛/})
  • 內嵌查詢:如某個鍵并不是一個基礎的類型,而是一個嵌套的類型,則可以使用內嵌查詢,來滿足業務需求;例如name鍵中包含first與last兩個子健,要查詢所有name中first為訊飛的數據,可以:db.app.find({name.first:"訊飛"})
  • 數組查詢:通過$all,$size,$slice實現;分別表示返回滿足所有數組元素的數據、滿足指定長度的數據以及數組的一個子集合
    • db.app.find({tagIds:{$all:[1,2]}}),只要某數據中tagIds鍵包含[1,2]數組,就返回
    • db.app.find({tagIds:{$size:3}}),只要某數據中tagIds鍵中有有三個值,就返回
    • db.app.find({tagIds:{$slice:[1,2]}}),返回偏移量為1,元素個數為2

$where查詢:

暫時不會,看某些參考博客上說,這種查詢方式不會利用到索引,查詢效率較低,不宜使用

limit,skip和sort的使用

limit:限制結果數量,限制的是上限。
skip:略過匹配到的前n個文檔,然后返回余下的文檔。skip略過過多的文檔時會產生性能問題,建議盡量避免。
sort:按照指定的鍵對文檔進行排序,1為升序,-1為降序。

db.app.find({}).limit(20).sort({updatetime:-1})

游標

mongo查詢結果其實一個游標,可以通過var cursor = db.app.find({})來獲取,可以利用游標來獲取結果,也可以達到limit、skip等效果

二、Mongo的update語句

公式:

db.collection.update({update filter},{update key-value},{upsert|multi|writeConcern})

解釋:

  • update filter:update的查詢條件,與find中query filter差不多
  • update key-value:要更新的update對象
  • upsert:如果不存在update的數據,是否插入新的數據,默認是false,不插入;可選參數
  • multi:默認false。只更新找到的第一條記錄;true,更具條件更新全部數據
  • writeConcern:拋出異常級別---沒用過

例子:

  • db.app.update({_id:3},{name:"訊飛輸入法"});將id等與3的數據更新為{"_id":3,"name":"訊飛輸入法"},也即該方法會刪除那些沒有在update key-value中的出現的鍵(由于mongo沒有回滾機制,個人感覺這個語法很坑)
  • db.app.update({_id:3},{$set:{name:"訊飛輸入法"}});將id等于3的數據中鍵name的值更新為訊飛輸入法

針對于update key-value說明:

  • $set:用來指定一個鍵并更新鍵值,若鍵不存在并創建
  • $inc:對文檔的某個值為數字型(只能為滿足要求的數字)的鍵進行增減的操作
  • $unset:主要是用來刪除鍵
  • $push:向文檔的某個數組類型的鍵添加一個數組元素,不過濾重復的數據。添加時鍵存在,要求鍵值類型必須是數組;鍵不存在,則創建數組類型的鍵
  • $pop:從數組的頭或者尾刪除數組中的元素,從數組尾部刪除:1,從數組頭部刪除:-1
  • ....

三、Mongo的remove語句

公式:

db.collection.remove({remove filter},{justOne|writeConcern})

解釋:

  • remove filter:remove的查詢條件,與find中的query filter差不多
  • justOne:為1表示刪除一個元素
  • writeConcern:拋出異常級別

列子:

db.app.remove({name:"/^訊飛/"},{justOne:1})

四、Mongo的insert/save語句

公式:

  • db.collection.insert(document)
  • db.collection.save(document)

解釋:

document表示要插入的文檔

例子:

  • db.app.insert({name:"訊飛輸入法",tagIds:[1,2,3,4]})
  • db.app.save({name:"訊飛輸入法",tagIds:[1,2,3,4]})

區別:

當主鍵"_id"不存在時,都是添加一個新的文檔,但主健"_id"存在時,就有些不同了;insert:當主鍵"_id"在集合中存在時,不做任何處理。save:當主鍵"_id"在集合中存在時,進行更新。

?

轉載于:https://www.cnblogs.com/sachen/p/6763082.html

總結

以上是生活随笔為你收集整理的mongo基础---增删改查的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。