MongoDB温习日记(二)---语法

上篇已经讲过MongoDB的安装与配置,接下来直接进入MongoVUE的操作以及MongoDB的语法。

打开MongoVUE,记得打开MongoDB服务!有很多人会出现一些错误,如:

  1. Error: couldn't connect to server 127.0.0.1:27017 src/mongo/shell/mongo.js:91
    错误
  2. mongodb 127.0.0.1:27017: 未将对象引用设置到对象的实例。

第一种,找到MongoDB数据存放目录,删除mongod.lock,([root@xxx mongodb]# rm mongod.lock -rf)再重启服务即可。

MongoDB温习日记(二)---语法_第1张图片

第二种,在添加完信息的时候,Test会失败,具体信息如图所示:

MongoDB温习日记(二)---语法_第2张图片

因为我们新创建的而且很多数据库都是新的什么也没有,所以一般就是直接置空。如果你确定有相应的用户名密码数据库再填上。所以,Username Password Database置空,Test成功,Connect链接成功打开图形界面。

MongoDB温习日记(二)---语法_第3张图片

为了方便管理,我这新建了一个测试数据库:右击集合名-Add Database...-输入TestDB-OK-右击TestDB-Add Collection-输入test-OK。至此我们新建了一张test表。

MongoDB温习日记(二)---语法_第4张图片

MongoDB增删查改:

  • 新增数据(Insert)

MongoDB是采用“K-V”格式存储的,我们知道JSON里面Value可能是“字符串”,可能是“数组”,又有可能是内嵌的一个JSON对象,相同的方式也适合于BSON。

  常见的插入操作也就两种形式存在:“单条插入”和“批量插入”。
  

右击test表,选择Insert/Import Documents

  • 单条插入

MongoDB温习日记(二)---语法_第5张图片

  • 批量插入

MongoDB温习日记(二)---语法_第6张图片

由于mongodb中没有提供给shell的“批量插入方法”,不过各个语言的Driver里都有批量插入的方法,后续会讲解。与此同时,我们同样可以通过.json数据文件进行批量导入。

注意:

MongoDB温习日记(二)---语法_第7张图片

Insert a document只能导入一条数据!!!并且不允许用" [ ] "包起来;Import multiple导入多条时,同样不允许用" [ ] "包起来。
  • 查找数据(Find)

添加完毕后我们来查找下刚添加的数据。

MongoDB温习日记(二)---语法_第8张图片

这个是简单的Find查找。查询后会有四个视图,分别是树形视图,表格视图,BJson视图,以及解释视图。前三个是结果内容,看哪个就依据个人习惯了。可以发现,数据里多了个“_id”字段:

 “_id": 这个字段是数据库默认给我们加的GUID,目的就是保证数据的唯一性。

当然,还有Find2查找:

MongoDB温习日记(二)---语法_第9张图片

到这我想Find跟Find2的区别就很显而易见了。一个shell命令,一个表达式。
对照表(方便观察,我对调了位置)

Find2 Find
this.age < 50 {"age": { $lt : 50 } }
this.age <= 50 {"age": { $lte : 50 } }
this.age = 50 {"age": 50 }
this.age > 50 {"age": { $gt : 50 } }
this.age >= 50 {"age": { $gte : 50 } }
this.age != 50 {"age": { $ne : 50 } }
this.age == 50 && this.name == "nick" {"age": 50 , "name":"nick"}
this.age == 50 && this.age == 100 { "age" : { $in : [ 50 , 100 ] } }
this.age == 50 \ \
this.age != 50 && this.age != 100 { "age" : { $nin : [ 50 , 100 ] } }
this.name.slice(0,1) == "z" { "name" : /^z/ }

Find操作不仅支持正则表达式,而且还支持js函数形式格式为 : {$where:function(){ ToDo.... }}
就学习而言个人推荐Find查找,当然方便而言肯定Find2,其实,换汤不换药啦,在Lear Shell窗口大家就可以发现两者之间的互换:

MongoDB温习日记(二)---语法_第10张图片

再来看看查选窗口的剩下条件Fields和Sort等等,也就是字面意思,显示的字段和排序方式。

MongoDB温习日记(二)---语法_第11张图片

Fields字段的值是1表示:查出id与该字段;值为0表示:查出表中所有字段,不包括该字段(可忽略)
Sort字段的值小于0表示降序,大于等于0表示升序
skip:表示跳过多少条数据,例如表中有10条,skip为2,那么只有查出8条数据
limit:表示分页
detail:勾上表示界面上显示{Fields}与{Sort}输入框
  • 更新数据(Update)

更新数据分为整体更新和局部更新:

  1. 整体更新(无条件更新全部)
  2. 局部更新

MongoDB温习日记(二)---语法_第12张图片

Key:

    updateExisting:更新
                 n:数量
        syncMillis:耗时
         writtenTo:写入
               err:失败
                ok:成功

上图使用的是\(set修改器,就无须多加说明,还有一种\)inc修改器,也就是increase的缩写,在原有基础上
自增$inc指定的值,如果“文档”中没有此key,则会创建key。
MongoDB温习日记(二)---语法_第13张图片MongoDB温习日记(二)---语法_第14张图片

upsert操作:这个是MongoDB独有的,使用时记得勾选Upsert选项:如果我们
没有查到,它就在数据库里面自动新增一条,避免了我在数据库里面判断是update还是add操作,使用起来很简单,后面跟个true即可。

MongoDB温习日记(二)---语法_第15张图片

MongoDB温习日记(二)---语法_第16张图片

如果查询多条结果,MongoDB默认只更新第一条,此时我们应该点击UpdateAll全部更新,Shell下是在在update的第四个参数中设为true即可。

MongoDB温习日记(二)---语法_第17张图片

  • 删除数据(Remove)

MongoDB删除数据需谨慎,如果不带参数则是删除全部数据,请考虑清楚,这是不可回撤操作!!!

MongoDB温习日记(二)---语法_第18张图片

至此,MongoDB的基本语法以及可视化工具操作已经讲解完毕。

MongoDB温习日记(二)---语法_第19张图片

你可能感兴趣的:(MongoDB温习日记(二)---语法)