最近接触到了Mongo数据库,只会简单的写入和读取操作,不过在大部分场景也够用了,这里做下记录。
注:本文基于Python和Robo 3T 对Mongo数据库进行操作

一、MongoDB 简介

MongoDB中的值存储格式类似于Json对象,多个值组成和,多个集合组成数据库。
MongoDB中存在以下系统数据库:

  • Admin数据库:一个权限数据库,如果创建用户的时候将该用户添加到admin数据库中,那么该用户就自动继承了所有数据库的权限
  • Local数据库:这个数据库永远不会被复制,可以用来存储本地单台服务器的任意集合
  • Config数据库:当MongoDB使用分片模式时,config数据库在内部使用,用于保存分片的信息。

一个MongoDB实例可以包含一组Database(数据库),一个 DataBase包含多个Collection(集合),集合中由多个文档组成,文档则是由字段和值对组成的数据结构,类似于JSON对象。
在这里插入图片描述
注:这里的 _id 是写入数据时自动生成的

二、在Robo 3T 中的使用

Robo 3T是一个MongoDB的可视化工具,便于查看一个mongodg实例里有哪些数据库,数据库里有哪些集合、文档等,还可以进行增删改查的操作。

1、Robo 3T 安装

Robo 3T 安装链接:https://robomongo.org/
在这里插入图片描述

2、Robo 3T 连接mongodb实例

在没有连接任何实例的情况下,下面的内容为空,点击 create 连接已经存在的实例(Robo 3T 只是一个可视化工具,不能创建新的服务器)
在这里插入图片描述

输入服务器的名称Name和地址 Address,外网端口默认为27017,内网则有所不同
在这里插入图片描述
在这里插入图片描述

3、Robo 3T 简单操作

连接成功后,点开是这样的界面,一个柱状体是一个Database
在这里插入图片描述
一个数据库下面自动生成下面三个文件夹,数据一般都是存在第一个文件夹 Collections 中,剩下两个文件我还不知道用途。
在这里插入图片描述
写入一个新的集合之后,需要点击 Refresh 更新,否则可能会看不到新写入的集合
在这里插入图片描述

Collections 下面有多个表格
在这里插入图片描述
注意:谨慎进行集合删除操作!!!
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在上面这一行控制栏可以输入操作语句,键入 ctrl + Enter 运行出结果,这里 count 是计算文档的数目
在这里插入图片描述
更多操作语句详细参考下面这个教程:
《robomongo(robo3T)操作MongoDB数据库常用命令》

4、不同数据库之间复制集合

db.trans.find().forEach(function(d){db.getSiblingDB('practice')['test'].insert(d);});

在这里插入图片描述
‘trans’ 是需要被复制的 collection,‘practice’ 是目标数据库,‘test’ 是复制得到的collection(被命名为 test)
第一次复制的时候出现了错误:
在这里插入图片描述
这里默认设置了最多运行时间为15秒,我的理解是,这是一个快速报错机制,可以比较快的反映错误。不过一旦需要复制的文档量过大,也会超时,只需要修改运行时间即可:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
将时间修改得大一些就可以了

5、不同实例之间复制集合

这个没有查到很好的直接在Robo 3T 上的操作,可以在python上,先把源数据集从数据库中读出来,再一条条插入到目的数据集当中。

三、基于Python使用MongoDB

本文的代码在 Pycharm上实现

  • 导入第三方库
import pymongo
  • 使用PyMongo的第一步是为正在运行的mongod实例创建一个MongoClient
 from pymongo import MongoClient
 client = MongoClient()

上述的代码是连接默认的host和端口,我们也可以选择特定的host和端口,如下:

client = MongoClient('localhost',27017)

或者使用 MongoDB 的 URL 形式:

 client = MongoClient('mongodb://localhost:27017/')
  • 获得数据库 (Database)
db = client.test_database
# 或者
db = client['test_database']

有些实例需要输入账号和密码才能获得使用权限

db = client.admin
db.authenticate('xxx_1', 'xxx_2')

xxx_1 是 Name(注意不是 user name),xxx_2 是 password

  • 获得集合 (Collection)
 collection = db.test_collection
 # 或者
 collection = db['test_collection']
  • 插入文档 (Document)
    使用 insert_one 可以插入文档
post = {
    'name':'xiao',
    'age':20
}
collection.insert_one(post)

插入文档时,如果文档未包含"_id"键,则会自动添加一个特殊的 “_id” 。"_id" 值在整个集合中必须是惟一的。

  • 查找文档
    find_one
print(collection.find_one({"name":"xiao"}))

参考资源

MongoDB中文手册|官方文档中文版
Mongdb之Robo3T
robomongo(robo3T)操作MongoDB数据库常用命令

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐