- 原因:
业务有个系统需要开发一些新需求,开发要一套测试系统用于开发与测试,这套系统使用的DB是mongodb,所以就搭一套。 - 安装:
确定历史版本mongo --version , 发现是3.2.8版本。
最简单的方法是直接把生产上的mongodb文件拷贝下来,复制过去就行,但无奈生产的机器安全级别太高,无法触碰,只好上官网下载比较新的3.2.22版本。
下载地址: https://www.mongodb.com/try/download/community
cd /home
# ftp传入 安装文件
tar -zxvf mongodb-linux-x86_64-rhel62-3.2.22.tgz
mv mongodb-linux-x86_64-rhel62-3.2.22 mongodb
mkdir -p /mgdb_dt
cd mongodb
echo "#!/bin/bash
nohup /home/mongodb/bin/mongod --dbpath /mgdb_dt > mongod.log 2>&1 &" > start.sh
chmod +x start.sh
echo "PATH=$PATH:/home/mongodb/bin
export PATH" >> ~/.bash_profile
source ~/.bash_profile
安装验证
[root@OEL6 mongodb]# mongod --version
db version v3.2.22
git version: 105acca0d443f9a47c1a5bd608fd7133840a58dd
OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013
allocator: tcmalloc
modules: none
build environment:
distmod: rhel62
distarch: x86_64
target_arch: x86_64
- 启动:
直接运行启动脚本
sh /home/mongodb/start.sh > /home/mongodb/start.log 2>&1
-
工具:
可以直接使用mongo命令行,但windows的图形化工具显然更简单些。
MongoDB Compass、Robo 3T等 -
使用:
登录
[root@OEL6 mongodb]# mongo
MongoDB shell version: 3.2.22
connecting to: test
Server has startup warnings:
2020-09-16T14:22:38.512+0800 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2020-09-16T14:22:38.512+0800 I CONTROL [initandlisten]
2020-09-16T14:22:38.512+0800 I CONTROL [initandlisten]
2020-09-16T14:22:38.512+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2020-09-16T14:22:38.512+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2020-09-16T14:22:38.512+0800 I CONTROL [initandlisten]
查看已有库
> show dbs
admin 0.000GB
local 0.000GB
test 0.207GB
切换/创建库(mongodb向没有的库切换时会自动创建库)
> use test
switched to db test
查看已有表(集合)
> show collections
test
插入记录/新建表(同创建库,向没有的表插入数据就会自动建表)
> db.newtb.insert({"xh":"123456","name":"测试姓名"})
WriteResult({ "nInserted" : 1 })
> show collections
newtb
test
查询记录:查询全部记录<限制返回5条记录>
> db.newtb.find().limit(5)
{ "_id" : ObjectId("5f61b3af7d40e48cc5efe75f"), "xh" : "123456", "name" : "测试姓名" }
查询记录:按条件查询
> db.newtb.find({"xh":"654321"})
> db.newtb.find({"xh":"123456"})
{ "_id" : ObjectId("5f61b3af7d40e48cc5efe75f"), "xh" : "123456", "name" : "测试姓名" }
更新记录:只更新符合条件的第一条记录
> db.newtb.update({"xh" : "123456"} , {$set: {"name":"修改姓名"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.newtb.find({"xh":"123456"})
{ "_id" : ObjectId("5f61b3af7d40e48cc5efe75f"), "xh" : "123456", "name" : "修改姓名" }
更新记录:更新全部符合条件的记录需添加参数{multi:true}
> db.newtb.insert({"xh":"123456","name":"测试姓名2"})
WriteResult({ "nInserted" : 1 })
> db.newtb.find({"xh":"123456"})
{ "_id" : ObjectId("5f61b3af7d40e48cc5efe75f"), "xh" : "123456", "name" : "修改姓名" }
{ "_id" : ObjectId("5f61b6127d40e48cc5efe760"), "xh" : "123456", "name" : "测试姓名2" }
> db.newtb.update({"xh" : "123456"} , {$set: {"name":"修改姓名"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
> db.newtb.find({"xh":"123456"})
{ "_id" : ObjectId("5f61b3af7d40e48cc5efe75f"), "xh" : "123456", "name" : "修改姓名" }
{ "_id" : ObjectId("5f61b6127d40e48cc5efe760"), "xh" : "123456", "name" : "测试姓名2" }
> db.newtb.update({"xh" : "123456"} , {$set: {"name":"修改姓名"}}, {multi:true})
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 1 })
> db.newtb.find({"xh":"123456"})
{ "_id" : ObjectId("5f61b3af7d40e48cc5efe75f"), "xh" : "123456", "name" : "修改姓名" }
{ "_id" : ObjectId("5f61b6127d40e48cc5efe760"), "xh" : "123456", "name" : "修改姓名" }
删除记录:
> db.newtb.deleteMany({"xh":"123456"})
{ "acknowledged" : true, "deletedCount" : 2 }
> db.newtb.find().limit(5)
>
- 同步:
业务需要mongodb与外部数据库(oracle+mysql)的数据保持一致。
在业务允许数据延迟的场景下,使用ETL方案。最简实现方法:Mongodb数据同步。
当业务要求数据实时的场景下,使用日志方案。最简实现方法:Oracle实时向Mongodb同步。