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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

MongoDB系列二

發布時間:2023/12/1 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MongoDB系列二 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介

? ? ?MongoDB是一個基于分布式文件存儲的數據庫。由C++語言編寫。旨在為WEB應用提供可擴展的高性能數據存儲解決方案。

  ?MongoDB是一個高性能,開源,無模式的文檔型數據庫,是當前NoSql數據庫中比較熱門的一種。

? ? ?MongoDB是一個介于關系數據庫和非關系數據庫之間的產品,是非關系數據庫當中功能最豐富,最像關系數據庫的。他支持的數據結構非常松散,是類似 json的bjson格式,因此可以存儲比較復雜的數據類型。Mongo最大的特點是他支持的查詢語言非常強大,其語法有點類似于面向對象的查詢語言,幾乎可以實現類似關系數據庫單表查詢的絕大部分功能,而且還支持對數據建立索引。

? ??傳統的關系數據庫一般由數據庫(database)、表(table)、記錄(record)三個層次概念組成,MongoDB是由數據庫 (database)、集合(collection)、文檔對象(document)三個層次組成。MongoDB對于關系型數據庫里的表,但是集合中沒有列、行和關系概念,這體現了模式自由的特點。

特點

  它的特點是高性能、易部署、易使用,存儲數據非常方便。主要功能特性有:

  1)面向集合存儲,易存儲對象類型的數據。

  2)模式自由。

  3)支持動態查詢。

  4)支持完全索引,包含內部對象。

  5)支持查詢。

  6)支持復制和故障恢復。

  7)使用高效的二進制數據存儲,包括大型對象(如視頻等)。

  8)自動處理碎片,以支持云計算層次的擴展性。

  9)支持RUBY,PYTHON,JAVA,C++,PHP,C#等多種語言。

  10)文件存儲格式為BSON(一種JSON的擴展)。

  11)可通過網絡訪問。

各文件功能

Mongod.exe 是用來連接到mongo數據庫服務器的,即服務器端。

Mongo.exe 是用來啟動MongoDB shell的,即客戶端。

mongodump 邏輯備份工具。

mongorestore 邏輯恢復工具。

mongoexport? 數據導出工具。

mongoimport? 數據導入工具。

安裝MongoDB

mongod --dbpath D:\MongoDB\data --logpath=D:\MongoDB\logs\mongodb.log --logappend

MongoDB Windows環境安裝及配置? 這篇文章介紹windows下安裝MongoDB不錯

C#中使用的MongoDB DLL驅動

?MongoDB.Driver.dll:顧名思義,驅動程序

?MongoDB.Bson.dll:序列化、Json相關

下載地址?http://files.cnblogs.com/files/liyunhua/MongoDBDll.zip

最最常用命令

use cnblogs // use 命令用來切換當前數據庫,如果該數據庫不存在,則會先新建一個。 show dbs // 顯示所有數據庫 show collections // 顯示當前數據庫下的所有集合 db.users.drop() // 刪除collection 如果刪除成功會返回“true”,否則返回“false” db.dropDatabase()//刪除當前數據庫

?

簡單的說一下增加、修改、刪除

db.users.insert({'name':'angela','sex':'feman'})// 這條命令是向users 集合中插入一條數據。如果集合users不存在,則會先新建一個,然后再插入數據,參數以JSON格式傳入。 db.users.update({'name':'xiangshu'},{'$set':{'sex':'women'}},upsert=true,multi=false)//解釋一下幾個參數: 第一:查詢的條件、 第二:更新的字段、 第三:如果不存在則插入 第四:是否允許修改多條記錄 db. users.remove({'name':'xumingxiang'})//刪除記錄 如果remove方法里面不傳入任何參數則刪除所有數據 清除集合中的所有數據,但是不會刪除集合本身以及關聯的索引 db.users.find() //查找

?細說上述update方法,上面update第三個參數是upsert,upsert操作就是說:如果我沒有查到,我就在數據庫里面新增一條,其實這樣也有好處,就是避免了我在數據庫里面判斷是update還是add操作,使用起來很簡單

默認情況下update方法是整體更新,如果需要局部更新,mongodb中已經給我們提供了兩個修改器: $inc 和 $set。

$inc修改器也就是increase的縮寫,

每次修改會在原有的基礎上自增$inc指定的值,$inc修改符將匹配條件的文檔的age鍵原子加一,缺省情況下只是更新第一條符合條件的文檔。可以通過update函數的最后一個參數來指定更新所有符合條件的文檔

$set修改直接修改匹配文檔的內容,如果修改的鍵存在則直接修改,否則新增。$unset修改符合$set的功能是完全相反的

具體復雜點的操作見Mongo學習筆記數據操作

詳述查找命令

上面例子中的findOne方法是查詢出第一條語句。

一般的查詢條件有and、or 、in、not in、not

db.person.find({"name":"jack","age":25})//相當于查詢name="jack" and age=25 db.person.find({ $or: [{ "name": "jack", "age": 25 }] })//相當于查詢name="jack" or age=25 db.person.find({ "name": { $in: ["jack", "joe"] } })//相當于查詢name in("jack","joe")

和sql server不一樣的是MongoDB的in list中的數據可以是不同類型。

db.person.find({ "name": { $nin: ["jack", "joe"] } })//相當于查詢name not in("jack","joe") db.person.find({ "$or": [{ "name": { "$in": ["jack", "joe"] } }, { "age": 25 }] })//如何混合使用$or和$in。 db.person.find({ "name": { "$not": { "$in": ["jack", "joe"] } } })//$not表示取反,等同于SQL中的not。

下面是查詢的相關......

db.person.find({}, {"name":1})//返回指定的文檔鍵值對。只是返回name的鍵值對。 db.person.find({}, {"name":0})//指定不返回的文檔鍵值對。返回除name之外的所有鍵值對。

?那如果需要查詢一些特定條件的 事實上是可以用正則的,看下面的例子。

db.person.find({ "name": /^j/, "name": /e$/ });//查詢name startwith 'j' and endwith 'e'

有些查詢很復雜的話,$where派上用場了。

db.person.find({ $where: function () { return this.name == 'jack'; } })//查詢name='jack'

?下面說說比較運算符。

$lt/$lte/$gt/$gte/$ne,依次等價于</<=/>/>=/!=。(l表示less g表示greater e表示equal n表示not ?)

?

db.person.find({ "age": { "$gte": 18, "#lte": 40 } });//返回符合條件age >= 18 && age <= 40

?

db.person.find({ "name": { "$ne": "jack" } })//返回條件符合name != "jack"

我相信大家在查詢數據的時候經常會碰到null,下面來說說null數據類型的查詢吧

db.person.find({"name":null})//在進行值為null數據的查詢時,所有值為null,以及不包含指定鍵的文檔均會被檢索出來。 db.person.find({"name": {"$in": [null], "$exists":true}}) //需要將null作為數組中的一個元素進行相等性判斷,即便這個數組中只有一個元素。再有就是通過$exists判斷指定鍵是否存在。

mongodb跟sqlserver數據查詢還是有很大不相同的一部分的,最顯著不一樣的地方就是MongoDb中的數組數據查詢。

具體來說說吧。現在假設我們數據庫里面查詢出來的數據如下圖所示:

db.test.find({"fruit":"banana"})//數組中所有包含banana的文檔都會被檢索出來。 db.test.find({"fruit": {"$all": ["banana","apple"]}})//檢索數組中需要包含多個元素的情況,這里使用$all。數組中必須同時包含apple和banana,但是他們的順序無關緊要。 db.test.find({"fruit":["apple","banana","peach"]})//精確匹配,即被檢索出來的文檔,fruit值中的數組數據必須和查詢條件完全匹配,即不能多,也不能少,順序也必須保持一致。 db.test.find({"fruit.2":"peach"})//匹配數組中指定下標元素的值。數組的起始下標是0。 查看出fruit數組中第二個元素的值為peach db.test.find({"fruit": {$size : 3}})//可以通過$size獲取數組的長度,但是$size不能和比較操作符聯合使用。就是說查詢出fruit長度為3的...

上述的例子是查詢fruit數組長度為3的,那如果需要查詢長度大于3的應該怎么辦呢

db.test.update({}, {"$set": {"size":3}},false,true)//只能是添加一個額外的鍵表示數據中的元素數據,在操作數據中的元素時,需要同時更新size鍵的值。 test.update({},{"$push": {"fruit":"strawberry"},"$inc":{"size":1}},false,true)//$inc每次添加一個新元素,都要原子性的自增size一次。 db.test.find({},{"fruit": {"$slice":2}, "size":0})//通過$slice返回數組中的部分數據。"$slice":2表示數組中的前兩個元素。"$slice":-2表示數組中的后兩個元素。$slice : [2,1],表示從第二個2元素開始取1個,如果獲取數量大于2后面的元素數量,則取后面的全部數據。

大家都知道,MongoDB是由數據庫 (database)、集合(collection)、文檔對象(document)三個層次組成。當一個文檔對象中包含另外多個文檔對象的時候,應該怎么查詢呢?

這時候$elemMatch就有用武之地了。

假設我們數據庫里面數據如下圖所示

db.person.find({"comments": {"$elemMatch": {"author":"joe","score":{"$gte":3}}}}

?

轉載于:https://www.cnblogs.com/liyunhua/p/4621907.html

總結

以上是生活随笔為你收集整理的MongoDB系列二的全部內容,希望文章能夠幫你解決所遇到的問題。

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