mongodb:linux基本操作
mongodb 基本操作
1.连接mongodb
mongo/bin目录下执行
./mongo 或者全局直接 mongo
2.查看有哪些数据库
show dbs
3.查看当前所在数据库
db
4.创建数据库,后面跟名字
use hello (临时创建 如果不做操作 则离开后被系统删除)
5.在当前数据库删除当前数据库
db.dropDatabase()
6.查看当前库的所有用户
show users
7.查看集合(或者叫表)
show collections
8.创建集合
db.createCollection("access_log")
9.创建集合并制定集合的属性
db.createCollection("access_log", { capped : true, autoIndexID : true, size : 6142800, max : 10000 } )
字段 | 类型 | 描述 |
---|---|---|
capped | Boolean | (可选)如果为true,则启用封顶集合。封顶集合是固定大小的集合,会自动覆盖最早的条目,当它达到其最大大小。如果指定true,则需要也指定尺寸参数。 |
autoIndexID | Boolean | (可选)如果为true,自动创建索引_id字段的默认值是false。 |
size | number | (可选)指定最大大小字节封顶集合。如果封顶如果是 true,那么你还需要指定这个字段。 |
max | number | (可选)指定封顶集合允许在文件的最大数量。 |
10.另一种创建集合
(当插入一条数据时,不存在mongodb会帮我们创建,和创建数据库同理)
db.test.insert({"name" : "adamanter"})
11.删除当前库的一个集合
db.test.drop() 删除用户表或者用户集合
12.插入一条数据
db.test.insert({"_id":"3","title":"mongotest","description":"this is test"})
注意:插入的都是JSON形式的,所以一定要用{},否则会报错:
Sat Mar 19 14:22:39.160 SyntaxError: Unexpected token :
13.插入一条_id存在的数据会插入报错说重复ID
db.test.insert({"_id":"3","title":"hello adamanter"})
输出:E11000 duplicate key error index: openfire.MyFirstCollection.$_id_ dup key: { : “3” }
解释:_id即是mongodb的默认主键,默认自动生成,我们可以直接设置以达到我们想要的目的
问:插入一条和原来集合完全不一样的数据可以吗? 答:可以,所以我们要在程序中规避,手动指定我们一个集合里面的字段,否则就无法实现查询及其他功能了 > db.test.insert({"newTitle":"null"}) > db.test.find(); { "_id" : "3", "title" : "new title", "description" : "this is test" } { "_id" : ObjectId("56ecf4fe0dceecace97c4506"), "newTitle" : "null" }
14.查看集合第一条记录和所有记录
db.test.findOne();
输出:{ “_id” : ObjectId(“56ecde0662552d15c443dd4a”), “name” : “adamanter” }
db.test.find()
15.查找一条/多条特定数据
db.test.findOne({"name":"adamanter"})
输出:{ “_id” : ObjectId(“56ecde0662552d15c443dd4a”), "name":"adamanter" }
16.更新一条记录
db.test.update({"title":"mongotest"},{$set:{"title":"new title"}},true,false)
结果:
db.test.findOne()
{ “_id” : “3”, “title” : “new title”, “description” : “this is test” }
update详解
db.collection.update(criteria,objNew,upsert,multi) criteria:查询条件 objNew:update对象和一些更新操作符 upsert:如果不存在update的记录,是否插入objNew这个新的文档,true为插入,默认为false,不插入。 multi:默认是false,只更新找到的第一条记录。如果为true,把按条件查询出来的记录全部更新。 更新操作符: 1.$inc 用法:{$inc:{field:value}} 作用:对一个数字字段的某个field增加value 示例:db.students.update({name:"student"},{$inc:{age:5}}) 2.$set 用法:{$set:{field:value}} 作用:把文档中某个字段field的值设为value 示例:db.students.update({name:"student"},{$set:{age:23}}) 3.$unset 用法:{$unset:{field:1}} 作用:删除某个字段field 示例: db.students.update({name:"student"},{$unset:{age:1}}) 4.$push 用法:{$push:{field:value}} 作用:把value追加到field里。注:field只能是数组类型,如果field不存在,会自动插入一个数组类型 示例:db.students.update({name:"student"},{$push:{"title":"major"}} 5.$rename 用法:{$rename:{old_field_name:new_field_name}} 作用:对字段进行重命名(不是值,是字段) 示例:db.students.update({name:"student"},{$rename:{"name":"newname"}})
mongdb拓展:
1.find()指定指定查询条件及其条件映射(查询的返回结果)
作用:减少流量
如果key:value,返回的value是个非常大的JSON,而我们不需要这么多字段,也许我们只需要其中的一个.
那么使用projection来过滤:
db.collection.find(query, projection) 此处projection就是返回值的过滤条件
参数 | 类型 | 描述 |
---|---|---|
query | 文档 | 可选. 使用查询操作符指定查询条件。 |
projection | 文档 | 可选. 根据条件,使用投影操作符指定返回的键。查询时返回文档中所有键值,只需省略该参数即可(默认省略). |
返回值: 匹配查询条件的文档集合的游标. 如果指定投影参数,查询出的文档返回指定的键 。
_id键也可以从集合中移除掉。
_id不指定的话,总是会返回_id。
1或者true代表返回,0或者false代表不返回。
示例:
db.test.findOne({“title”:”new title”},{“description”:1,”_id”:0});
{ “description” : “this is test” }
也可以使用表达式:
db.test.findOne({“title”:”new title”},{Items:{“$slice”:[3,1]}});
db.test.findOne({"hello":"world"},{"_id":0});
{ "hello" : "world" }