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的学习,操作命令详细介绍相关推荐

  1. mac mongodb可视化工具_MongoDB从立地到成佛(介绍、安装、增删改查)

    文章作者公众号bigsai,已收录在回车课堂,如有帮助还请不吝啬点个赞赞支持一下! 课程导学 大家好我是bigsai,我们都学过数据库,但你可能更熟悉关系(型)数据库例如MySQL,SQL SERVE ...

  2. 很好的学习资料-详细介绍SVM-来自matlab论坛-【关于SVM的那点破事】.mht

    上网查阅资料,在matlab论坛发现了一个好长好长的好帖子,推荐给想要踏踏实实研究svm的初学者. 帖子优点: 1,详细.例如:matlab mex的设置问题,详细介绍了 mex -setup 各个选 ...

  3. mongodb数据库淘汰_Mongodb数据库学习

    数据库 MongoDB (芒果数据库) 数据存储阶段 文件管理阶段 (.txt .doc .xls) 优点 : 数据可以长期保存 可以存储大量的数据 使用简单 缺点 : 数据一致性差 数据查找修改不方 ...

  4. Python精通-Python学习路线详细介绍

    导语   自从上次说完Python学习路线之后就再也没有更新过关于Python的东西,那么从这篇博客开始将对整个的Python技术栈开启以场全面的旅途,更其他系列一样,博主会不定期的更新关于Pytho ...

  5. mongodb连接失败_MongoDB 基础入门

    mongodb 一.NoSQL 简介 NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL". 在现代的计算系统上每天网络上都会产生庞大的数据量. 这些数 ...

  6. mongodb 安装包_MongoDB快速入门,掌握这些刚刚好!

    虽说现在关系型数据库还是主流,但是面对某些需求的时候,需要非关系型数据库来补充它,学习一个主流的NoSQL数据库还是很有必要的.MongoDB是一个功能丰富的NoSQL数据库,本文整理了它最常用的部分 ...

  7. 关于Mongodb的全面总结,学习mongodb的人,可以从这里开始!

    转载地址:http://blog.csdn.net/he90227/article/details/45674513 原文地址:http://blog.csdn.NET/jakenson/articl ...

  8. MongoDB自定义条件查询案例

    MongoDB自定义条件查询案例

  9. MongoDB多条件分组聚合查询

    MongoDB多条件分组聚合查询 1.样例数据 {"_id" : ObjectId("5fa13fb76c3107345a82c047"),"_cla ...

最新文章

  1. 任意用户密码重置(四):重置凭证未校验
  2. Java常用类之要点总结
  3. 云信“欢乐颂活动”中奖名单
  4. Android数据库高手秘籍(一)——SQLite命令
  5. 编译32位_玩转Android10源码开发定制(11)内核篇之安卓内核模块开发编译
  6. Math源码java_深入学习java源码之Math.sin()与 Math.sqrt()
  7. python-双层嵌套循环-打印小星星
  8. 透过NpetShop 看Web项目开发中的分工合作
  9. UVA 11107 Life Forms——(多字符串的最长公共子序列,后缀数组+LCP)
  10. js中的null VS undefined
  11. Egg 2.20.0 发布,阿里开源的企业级 Node.js 框架
  12. 通达信手机版服务器文件夹,【通达信】通达信的一些目录和系统文件,用法说明。以备查询。...
  13. Linux常用命令(一)
  14. 超详细的Python面向对象编程讲解
  15. 机器学习笔记最大熵之NER
  16. hadoop的map和reduce
  17. mysql 存储过程 if !=_mysql 存储过程 if !=
  18. 广东省第三届职业技能大赛网络安全项目模块B
  19. 爱航拍,可以在这里晒出无人机和航拍故事
  20. 用累积分布函数(CDF)计算期望

热门文章

  1. 迅为i-TOP4412出厂首次烧写
  2. 缓冲区溢出-基本ROP-ret2syscall
  3. Juniper 文章目录
  4. iptables白名单配置
  5. linux-----shell高级编程----sed应用
  6. 万能的Entry,两个变量的Model/JavaBean再也不用写了!
  7. java.lang.InstantiationException
  8. 2ASK和2FSK相干解调误码率仿真matlab
  9. codeforce训练2总结
  10. ambari hive mysql_ambari方式安装hadoop的hive组件遇到的问题