这几天主要是看了一下mongodb的一些知识,网上也有一些教程,今天主要是复习一下mongodb
在连接mongodb前首先要创建数据存放目录与日志存放目录,还得保证当前用户对这两个目录有相应的读写操作
mongod --dbpath=/usr/local/mongodb/data/db/ --logpath=/usr/lcoal/mongodb/data/logs/mongodb.log --logappend --bind_ip=0.0.0.0 --port=27017
这时候是以非守护进程模式运行mongodb,我们退出后mongodb也会退出;
使用mongosh连接mongodb
use databasename
当有这个库的时候就会切换到这个库,没有则创建一个库并切换到该库
当我们刚创建一个空的库时,我们使用查看命令是查看不到该库的,只有库中有数据时才会显示出来;
有了库,我们在库中创建集合:
创建集合两种方式:
db.createCollection('gavinlim',{capped:true,autoIndexId:true,size:102400,max:10000})
这种方式会指定一些参数:
db.gpl.insert({'name':'gavin','age':29})
这种插入数据的方式,如果有集合,则向该集合插入数据,如果没有该集合,则创建该集合并插入数据
db.gpl.find()
关于主键是否有必要自己创建而不用mongodb给出的方案的问题:
我们使用insert的方式创建的集合,会默认使用主键
_id: ObjectId("642d6c8a0f471b266387e6f5")
如果不需要使用mongodb通过的主键方式,那么索引就成了一个问题,需要在创建索引,
我们在创建集合时故意不指定autoIndexId,但是在插入数据时还是生成了一个_id,这说明monggodb不建议自定义主键,(如果使用自定义主键,那么可能需要修改配置文件吧)
MongoDB中的主键是什么?
在MongoDB中,_id字段是集合的主键,以便可以在集合中唯一地标识每个文档。_id字段包含唯一的Object ID 值。
默认情况下,在集合中插入文档时,如果您没有在字段名称中添加带有_id的字段名称,则MongoDB将自动添加一个Object id字段
自定义主键
如果要确保在创建集合时MongoDB不会创建_id字段,并且要指定自己的ID作为集合的_id,则需要在创建集合时明确定义它。
在显式创建id字段时,需要使用名称中的_id创建它。
如下面的方式:
hadoop> db.code.insert({_id:001,'name':'Bob','age':27})
{ acknowledged: true, insertedIds: { '0': 1 } }
hadoop> db.code.find()
[ { _id: 1, name: 'Bob', age: 27 } ]
#db.collectionname.drop()
db.gavin.drop()
db.dropDatabase()
有一点小发现,我们删除数据库了,这只意味着删除了数据库中的集合,我们在创建数据库(同名)的时候会提示
already on db hadoop
到这里,或许我们就大致理解了mongodb的模型了:
我们对比一下关系型数据库Mysql:
monggodb中存储的数据结构比较松散,不像mysql中那样一但定下来就步容易修改了;
在没有指定自定义主键的情况下:
可以看到由于主键不同,素以可以正常插入
我们插入自定义的主键:
可以发现报错了;
选择器主要用于加快数据的操作效率
学习选择器我们以update()函数为例子
修改数据:
hadoop> db.gpl.update({'name':'Bob'},{$set:{'name':'Jobs'}})
{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0
}
有多条数据时,只会修改第一条匹配的数(如果未指定修改多条数据的情况下)
$inc
针对数值做运算的
db.gpl.update({'name':'Bob'},{$inc:{'age':10}})
其他选择器: