数据库的神操作
MongoDB的安装使用
MongoDB数据导入导出
MongoDB的全文检索
MongoDB在OMIM中实际应用(omimDataCol)
Mongodb的权限管理
MySQL安装教程-win10
MySQL操作(Linux)
本文档使用 MrDoc 发布
-
+
up
down
首页
MongoDB在OMIM中实际应用(omimDataCol)
``` # 创建超级账户 use admin db.createUser({'user':'lvlh', 'pwd':'meifen1028', 'roles':['root']}) # 之后对其他数据库设置账户时需要先验证 use admin db.auth('lvlh', 'meifen1028') use bioDB #给bioDB数据库添加账户验证 db.createUser({'user':'lvlhRW', 'pwd':'meifen1028', 'roles':['readWrite']}) db.createUser({'user':'lvlhR', 'pwd':'laihui0923', 'roles':['readWrite']}) #之后使用bioDB就需要账户验证了。 #python中使用,并插入数据: import pymongo #myclient = pymongo.MongoClient("mongodb://localhost:27017/") host = '127.0.0.1'; port = 27017 myclient = pymongo.MongoClient(host, port) bioDB = myclient.bioDB bioDB.authenticate('lvlh', 'meifen1028') omim = bioDB['omimData'] #AllData = {one json format data} omim.insert_one(AllData) ``` ## 1、数据库bioDB中的集合omimDataCol收集了OMIM的数据。 ``` // 测试获取mimID为103320的文档 db.getCollection('omimDataCol').find({"mimID":"103320"}) //看到结果有三条,他们分别有一个字段是date,即加入到数据库中的日期 //现依据日期选择其最大日期(即最新日期)的数据 db.getCollection('omimDataCol').aggregate([{$match:{"mimID":"103320"}}, {$sort:{"date":-1}}, {$group:{_id:"$mimID", newDate:{$first:"$$ROOT"}}}]) // 解释说明:1 $match,按条件找出所有文档; // 2 按照date字段倒序排序 // 3 按照mimID进行聚合并求出第一个文档的所有内容, 内容会放入 newDate 里面 // 如此将match条件清空,就对所有文档进行mimID聚合,并倒序输出第一条文档内容,存入newDate中 db.getCollection('omimDataCol').aggregate([{$match:{}}, {$sort:{"date":-1}}, {$group:{_id:"$mimID", newDate:{$first:"$$ROOT"}}}]) // 由于有排序,可能会出现内存溢出问题,Mongo数据库排序(Sort)阶段默认最大的存储内存限制为100 MB,所以如果要解除限制需要更改聚合操作中的“allowDiskUse ”属性。 db.getCollection('omimData').aggregate([{$match:{}}, {$sort:{"date":-1}}, {$group:{_id:"$mimID", newDate:{$first:"$$ROOT"}}}], {allowDiskUse:true}) ``` ``` # python pymongo myclient = MongoClient('localhost', 27017) bioDB = myclient.bioDB bioDB.authenticate('lvlhR', 'laihui0923') omimCol = bioDB.omimData refer='mimID'; key='614763' match = {"$match": {"$or": [{refer:key}, {refer:{"$regex": key}}]}} sort = {"$sort": {'date': -1}} group = {"$group": {'_id':'$mimID', 'newDate':{"$first": "$$ROOT"}}} omimCol.aggregate([match, sort, group]) ``` ## 2、多条件查询 ``` // 在find查询中,通过$or 和$and进行多条件查询 // 查询mimID为122600,且日期值小于20201010的记录 db.getCollection('omimDataCol').find({ $and: [ {mimID:'122600'},{date:{$lt:20201010}} ] }) // 查询一条mimID为122600,且日期最大的记录 db.getCollection('omimDataCol').find({"mimID":'122600'}).sort({date:-1}).limit(1) ``` ## 3、正则查询 ``` // $regex给予正则表达式 // 查询mimClass字段的值包含Gene,且mimID符合正则 600[0-9]70的记录 db.getCollection('omimDataCol').find({ $and:[ {"mimClass":{$regex:"Gene"}},{"mimID":{$regex:"600[0-9]70"}} ] }) ``` ## 4、索引 MongoDB中有慢查询概念,默认超过100ms就会记录到慢日志mongodb.log,如下命令可以查看是否100ms进行记录 ``` db.getProfilingStatus() /* { "was" : 0, "slowms" : 100, // 100ms,所以当超过100ms会记录到慢日志中 "sampleRate" : 1.0 } */ ``` 查询很大的数据时如果没有索引,将会变得很慢。**expain命令可以查看语句性能** ``` db.getCollection('omimDataCol').find({ $and:[ {"mimClass":{$regex:"Gene"}},{"mimID":{$regex:"600[0-9]70"}} ] }).explain(true) //结果中可以查看到executionStats.totalDocsExamined:26163总共扫描数 //executionStats.executionStages.stage:COLLSCAN是全盘扫描 ``` 建立索引进行查询 ``` // getIndexes()查看索引 db.getCollection('omimDataCol').getIndexes() /* 看到如下,仅有一个_id索引 [ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ] */ //使用索引进行查找的优势 //例如查找122600 db.getCollection('omimDataCol').find({"mimID":"122600"}).explain(true) db.getCollection('omimDataCol').find({"_id":ObjectId("5f85634e1ec71851321742bb")}).explain(true) //可以看到上面查询是全盘查询,而下面是IDHACK查询,仅扫描了一条,速度是非常快的 // 将mimID加入索引 db.getCollection('omimDataCol2').ensureIndex({mimID:1}) db.getCollection('omimDataCol2').getIndexes() //看到两个索引了 db.getCollection('omimDataCol').find({"mimID":"122600"}).explain(true) //看到是FETCH查询,且仅扫描了2条,速度更快。但是不是IDHACK,因为mimID不是唯一的索引 // 删除索引 db.getCollection('omimDataCol2').dropIndex({mimID:1}) ``` **尽量不要使用正则,因为使用正则时,索引是无效果的,很耗性能。** ``` // 虽然是FETCH查询,但看到是全部扫描的,totalDocsExamined:26163总共扫描数 db.getCollection('omimDataCol').find({ $and:[ {"mimClass":{$regex:"Gene"}},{"mimID":{$regex:"600[0-9]70"}} ] }).explain(true) ```
laihui126
2023年10月18日 16:39
分享文档
收藏文档
上一篇
下一篇
微信扫一扫
复制链接
手机扫一扫进行分享
复制链接
关于 MrDoc
觅道文档MrDoc
是
州的先生
开发并开源的在线文档系统,其适合作为个人和小型团队的云笔记、文档和知识库管理工具。
如果觅道文档给你或你的团队带来了帮助,欢迎对作者进行一些打赏捐助,这将有力支持作者持续投入精力更新和维护觅道文档,感谢你的捐助!
>>>捐助鸣谢列表
微信
支付宝
QQ
PayPal
下载Markdown文件
分享
链接
类型
密码
更新密码