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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

golang mongodb or条件_MongoDB的学习,操作命令详细介绍

發布時間:2025/4/5 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 golang mongodb or条件_MongoDB的学习,操作命令详细介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

mongo shell

mongo shell是MongoDB的交互式JavaScript接口。 您可以使用mongo shell查詢和更新數據以及執行管理操作。
mongo shell作為MongoDB Server安裝的一部分包含在內。 MongoDB還提供mongo shell作為獨立軟件包。

現在我們開始使用吧,進入mongodb的安裝目錄的bin目錄,當然你也可以設置mongodb的環境變量。

./mongo ip地址:port

創建數據庫

show dbs:顯示數據庫列表

use dbName:創建數據庫,插入數據才能創建數據庫成功。

show collections:db下面創建的集合列表

db.stats() :顯示數據庫信息

db.help(),db.collection.help():內置幫助,顯示各種方法的說明;

db.collection.find().size():獲取查詢集合中文檔的數量;

db.collection.drop():從數據庫中刪除指定的集合。

db.collection.count():集合中的文檔計數

CURD操作

insert操作:

db.collection.insert({}):將一個或多個文檔插入到集合中。

db.collection.insertOne({}):將單個文檔插入集合中,3.2版本新功能。

如果文檔未指定_id字段,則MongoDB將具有ObjectId值的_id字段添加到新文檔中。

db.collection.insertMany({}):將多個文檔插入一個集合中,3.2版本新功能。

find操作:

db.collection.find(query, projection)

query:可選,使用查詢操作符指定查詢條件

projection:可選,使用投影操作符指定返回的鍵。查詢時返回文檔中所有鍵值,只需省略該參數即可(默認省略)。

首先來介紹MongoDB提供的查詢操作符

比較:

$eq:匹配等于指定的值

$gt:匹配大于指定的值

$gte:匹配大于或等于指定的值

$in:匹配數組中指定的任何值。

$lt:匹配小于指定的值。

$lte:匹配小于或等于指定的值

$ne:匹配所有不等于指定的值。

$nin:不匹配數組中指定的任何值。

邏輯:

$and:用AND連接查詢子句,返回與兩個子句的條件都匹配的所有文檔。

$not:返回與查詢表達式不匹配的文檔。

$nor:將查詢子句與nor連接,返回所有未能匹配這兩個子句的文檔。

$or:用or連接查詢子句,返回與任一子句條件匹配的所有文檔。

元素:

$exists:匹配具有指定字段的文檔。

$type:如果字段是指定類型,則選擇文檔

估值:

$expr:允許在查詢語言中使用聚合表達式。

$mod:對字段的值執行模運算,并選擇具有指定結果的文檔。

$text:執行文本搜索。

$regex:選擇值與指定的正則表達式匹配的文檔。

還有其他的類型的比如:按照空間地理的,數組,字節,注釋等,不做介紹了,在這里指出了比較常用的。

Projection操作符:

$:在與查詢條件匹配的數組中投影第一個元素。

$elemMatch:投影與指定的$elemMatch條件匹配的數組中的第一個元素。

$meta:投影$text操作期間分配的文檔分數。

$slice:限制從數組投影的元素數量。 支持skip和limit slices.

這里插入官方提供的一個例子,這里只截取一部分。

db.bios.find({_id:5}):返回_id等于5的bios集合中的文檔

返回的數據格式較亂,可讀性較差,可以在語句后面加入pretty()

db.bios.find( { "name.last": "Hopper" } ):訪問嵌入式文檔中last字段值為“Hopper”的文檔。

db.bios.find({ _id: { $in: [ 5, ObjectId("507c35dd8fada716c89d0013") ] } }):查詢_id包含5, ObjectId("507c35dd8fada716c89d0013")的文檔。

db.bios.find( { birth: { $gt: new Date('1950-01-01') } } ):查詢birth字段,大于1950-01-01的文檔

db.bios.find({ "name.last": { $regex: /^N/ } }):查詢集合中name.last字段以字母N開頭的文檔,如sql中的"like N%"。

db.bios.find( { birth: { $gt: new Date('1940-01-01'), $lt: new Date('1960-01-01') } } ):查詢birth在這兩個時間之間的文檔。

db.bios.find( {birth: { $gt: new Date('1920-01-01') },death: { $exists: false }} ):查詢birth字段大于

1920-01-01,而且death不存在的集合。

還有很多的find查詢的方法,我就不截圖了。在這里簡單的列出下。

#查詢集合中,name字段#符合 first: "Yukihiro", last: "Matsumoto"的文檔db.bios.find( { name: { first: "Yukihiro", last: "Matsumoto" } })#名稱字段必須與嵌入文檔完全匹配,以下都不匹配{ first: "Yukihiro", aka: "Matz", last: "Matsumoto"}{ last: "Matsumoto", first: "Yukihiro"}#也可以使用這種方式db.bios.find( { "name.first": "Yukihiro", "name.last": "Matsumoto" })

有關數據元素的操作:

#contribs數據中的UNIX元素db.bios.find( { contribs: "UNIX" } )##數組元素中包含db.bios.find( { contribs: { $in: [ "ALGOL", "Lisp" ]} } )#數組元素中同時包含db.bios.find( { contribs: { $all: [ "ALGOL", "Lisp" ] } } )#數組的大小db.bios.find( { contribs: { $size: 4 } } )

接下來看看有投影操參數,projection參數指定要返回的字段。

使用投影參數需要注意一點。該參數包含:包含或排除規范,但不能同時包含兩者,除非排除是針對_id字段的。

db.bios.find( { }, { name: 1, contribs: 1 } ):只返回name,contribs兩個字段,其他的字段不需要顯示,

_id字段是默認顯示的,除非投影文檔_id:0中明確排除_id字段。用0,1來控制。

#結合查詢參數和投影參數,返回contribs數組中包含db.bios.find(OOP { contribs: 'OOP' }, { 'name.first': 0, birth: 0 })#_id不顯示,只顯示name.last和contribs#且數組contribs前兩個元素db.bios.find( { }, { _id: 0, 'name.last': 1, contribs: { $slice: 2 } })

其他查詢方法:

db.bios.find().limit( 5 ):查詢前5條

db.bios.find().skip( 5 ):跳過前5條,返回剩下所有

db.bios.find().sort( { name: 1 } ):按照name字段排序,1:升序,-1:降序

db.bios.find().sort( { name: 1 } ).limit( 5 )

db.bios.find().limit( 5 ).sort( { name: 1 } )

delete操作

db.collection.deleteOne( , { writeConcern: , collation: })

filter:使用查詢運算符指定刪除條件。指定一個空文檔{}刪除集合中返回的第一個文檔。

writeConcern:可選的,忽略使用默認的writeConcern。

collation:collation是指允許MongoDB的用戶根據不同的語言定制排序規則。

如果未指定collation規則,但是集合具有默認collation規則。常用的配置如下:

collation: { locale: , caseLevel: , caseFirst: , strength: , numericOrdering: , alternate: , maxVariable: , backwards: }

db.orders.deleteOne:刪除與過濾器匹配的第一個文檔。

try { db.orders.deleteOne( { "_id" : ObjectId("563237a41a4d68582c2509da") } );} catch (e) { print(e);}try { db.orders.deleteOne( { "_id" : ObjectId("563237a41a4d68582c2509da") }, { w : "majority", wtimeout : 100 } );} catch (e) { print (e);}

如果花費的時間超過了wtimeout限制,則會引發以下異常:

WriteConcernError({ "code" : 64, "errInfo" : { "wtimeout" : true }, "errmsg" : "waiting for replication timed out"})

db.collection.deleteMany():從集合中刪除所有與過濾器匹配的文檔。

插入測試數據:

{ _id: ObjectId("563237a41a4d68582c2509da"), stock: "Brent Crude Futures", qty: 250, type: "buy-limit", limit: 48.90, creationts: ISODate("2015-11-01T12:30:15Z"), expiryts: ISODate("2015-11-01T12:35:15Z"), client: "Crude Traders Inc."}try { db.orders.deleteMany( { "client" : "Crude Traders Inc." } );} catch (e) { print (e);}try { db.orders.deleteMany( { "stock" : "Brent Crude Futures", "limit" : { $gt : 48.88 } } );} catch (e) { print (e);}

update操作

db.collection.update(query, update, options)

db.collection.update( , , { upsert: , multi: , writeConcern: , collation: , arrayFilters: [ , ... ], hint: // Available starting in MongoDB 4.2 })

query:update的查詢條件,類似sql update查詢內where后面的;

updateupdate的對象和一些更新的操作符(如$,$inc...)等,也可以理解為sql update查詢內set后面的。

upsert可選,這個參數的意思是,如果不存在update的記錄,是否插入新文檔,true為插入,默認是false,不插入。

multi可選,mongodb 默認是false,只更新找到的第一條記錄,如果這個參數為true,就把按條件查出來多條記錄全部更新。

writeConcern::可選,寫安全配置。

collation:可選,collation是指允許MongoDB的用戶根據不同的語言定制排序規則。

arrayFilters:可選,篩選文檔的數組,用于確定針對數組字段的更新操作要修改哪些數組元素。

hint:一個文檔或字符串,它指定用于支持查詢的索引。4.2的新功能。

先介紹更新操作符:

$inc:指定值加n

$set:更新指定字段

$unset:將指定字段刪除

$rename:更新字段名稱

$:定位到某一個元素

$push:添加值到數組中

$addToSet: 添加值到數組中,有重復則不處理

$pop:刪除數組第一個或者最后一個

$pull:從數組中刪除匹配查詢條件的值

$pullAll:從數組中刪除多個值 數組運算修飾符

$each:與$push和$addToSet一起使用來操作多個值

$slice:與$push和$each一起使用來操作用來縮小更新后 數組的大小

$sort:與$push、$each和$slice一起使用來對數組進行排 序

$isolated:隔離其他操作,不允許其他操作交叉更新,不能在分片中使用

插入測試數據:

db.books.remove({});db.books.insertMany([ { "_id" : 1, "item" : "TBD", "stock" : 0, "info" : { "publisher" : "1111", "pages" : 430 }, "tags" : [ "technology", "computer" ], "ratings" : [ { "by" : "ijk", "rating" : 4 }, { "by" : "lmn", "rating" : 5 } ], "reorder" : false }, { "_id" : 2, "item" : "XYZ123", "stock" : 15, "info" : { "publisher" : "5555", "pages" : 150 }, "tags" : [ ], "ratings" : [ { "by" : "xyz", "rating" : 5 } ], "reorder" : false }]);db.books.update( { _id: 1 }, { $inc: { stock: 5 }, $set: { item: "ABC123", "info.publisher": "2222", tags: [ "software" ], "ratings.1": { by: "xyz", rating: 3 } } })

可以看出_id=1的數據已經更新

對應的SQL語句:

UPDATE booksSET stock = stock + 5 item = "ABC123" publisher = 2222 pages = 430 tags = "software" rating_authors = "ijk,xyz" rating_values = "4,3"WHERE _id = 1

upsert例子:

db.books.update( { item: "ZZZ135" }, // Query parameter { // Replacement document item: "ZZZ135", stock: 5, tags: [ "database" ] }, { upsert: true } // Options)

集和插入一個新的文檔:

注意:

如果所有db.collection.update()操作在任何客戶端成功插入數據之前完成了查詢部分,并且name字段上沒有唯一索引,則每個更新操作都可能導致插入。
為防止MongoDB多次插入同一文檔,請在名稱字段上創建唯一索引。 使用唯一索引,如果多個應用程序使用upsert:true發出相同的更新,則只有一個db.collection.update()將成功插入一個新文檔。

插入測試數據:

db.members.insertMany([ { "_id" : 1, "member" : "abc123", "status" : "A", "points" : 2, "misc1" : "note to self: confirm status", "misc2" : "Need to activate", "lastUpdate" : ISODate("2019-01-01T00:00:00Z") }, { "_id" : 2, "member" : "xyz123", "status" : "A", "points" : 60, "misc1" : "reminder: ping me at 100pts", "misc2" : "Some random comment", "lastUpdate" : ISODate("2019-01-01T00:00:00Z") }])db.members.update( { }, [ { $set: { status: "Modified", comments: [ "$misc1", "$misc2" ], lastUpdate: "$$NOW" } }, { $unset: [ "misc1", "misc2" ] } ], { multi: true })

第一階段, $ set階段:
創建一個comments字段,其元素是misc1和misc2字段的當前內容,并且 將字段lastUpdate設置為NOW的值。 聚合變量NOW解析為當前日期時間值。
第二階段 $unset階段刪除misc1和misc2字段。
更新后的數據:

{ "_id" : 1, "member" : "abc123", "status" : "Modified", "points" : 2, "lastUpdate" : ISODate("2020-01-23T05:11:45.784Z"), "comments" : [ "note to self: confirm status", "Need to activate" ] }{ "_id" : 2, "member" : "xyz123", "status" : "Modified", "points" : 60, "lastUpdate" : ISODate("2020-01-23T05:11:45.784Z"), "comments" : [ "reminder: ping me at 100pts", "Some random comment" ] }


db.collection.updateOne()根據過濾器更新集合中的單個文檔。

try { db.members.updateOne( { "member" : "abc123" }, { $set: { "status" : "updateOne" } } );} catch (e) { print(e);}

db.collection.updateMany():更新與集合的指定過濾器匹配的所有文檔。

try { db.members.updateMany( { points: { $gt: 10 } }, { $set: { "Review" : true } } );} catch (e) { print(e);}

在這里介紹mongodb的增刪改查的常用的方法。還有很多的方法。可以在官網了解。

地址:https://docs.mongodb.com/manual/reference/method/js-collection/

喜歡的話,可以關注我,后續繼續介紹mongodb的其他知識。

總結

以上是生活随笔為你收集整理的golang mongodb or条件_MongoDB的学习,操作命令详细介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 久久久久久久久99 | 欧美三级免费看 | 国内精品人妻无码久久久影院蜜桃 | 伊人日本 | 精品国产鲁一鲁一区二区三区 | 狠狠躁夜夜躁人 | 精品免费国产一区二区三区 | 亚洲a在线观看 | 亚洲午夜网站 | 午夜av网| 午夜黄色网 | 国产一区二区三区在线观看视频 | 丁五月| 伊人影院亚洲 | 午夜国产一区二区 | 国产精品黄视频 | 黄色一级大片在线免费看产 | 北条麻妃99精品青青久久 | 69精品| 激情午夜视频 | 波多野吉衣中文字幕 | 欧美毛片在线观看 | 男女视频在线免费观看 | 国产精品午夜在线观看 | 亚洲经典一区二区三区四区 | 成人午夜久久 | 久热中文 | 四色成人网| 美女高潮流白浆视频 | 免费看黄色一级大片 | 久久美| 一级特黄a| 日韩视频一区二区三区在线播放免费观看 | 黄色片在线免费看 | 亚洲乱码中文字幕久久孕妇黑人 | 超碰人人91| 你懂的网址在线 | 波多一区二区 | 搡老岳熟女国产熟妇 | 色偷偷成人 | 欧美三级 欧美一级 | 中文字幕在线看人 | 国产精品成人免费一区二区视频 | 精产国品一区二区 | 久艹av | 无遮挡边吃摸边吃奶边做 | 超碰日本| 国产又粗又猛又爽又黄的视频一 | 日韩少妇内射免费播放18禁裸乳 | 看欧美一级片 | xxxx18日本 | 中文字幕久久久久久久 | 欧美成人视 | 国产又粗又猛又爽又黄av | 亚洲一区二区三区无码久久 | 日本美女动态 | 亚洲精品乱码久久久久久蜜桃欧美 | 蜜桃视频色| 亚洲精品鲁一鲁一区二区三区 | 国产成人av片 | 丰满圆润老女人hd | 无人码人妻一区二区三区免费 | 国产精品久久久久一区二区 | 国产精品免费一区二区三区 | 成年网站免费在线观看 | a级免费视频 | 97超碰人 | 朝桐光一区二区 | 成人国产三级 | 久久亚洲AV无码专区成人国产 | 青青草污视频 | 精品国产一二三四区 | 亚洲国产精一区二区三区性色 | 亚欧乱色 | 国产欧美在线精品日韩 | 三八激情网 | 国产综合av | 91精品一区二区三区综合在线爱 | 疯狂做爰高潮videossex | 操网| 香蕉大久久 | 成人夜色视频 | 国产农村妇女精品 | 日韩精品欧美 | 国产在视频线精品视频 | 日韩一区二区三区免费视频 | 黄色片视频免费观看 | 亚洲free性xxxx护士白浆 | 7m精品福利视频导航 | 亚洲精品资源 | 91av国产视频| 成人免费在线网址 | 中国av一级片 | 国产一区二区三区四区在线观看 | 亚洲精品乱码久久久久久写真 | 成人美女毛片 | 国产一区999| 成人在线免费看片 | 亚洲天堂一区二区在线观看 |