NoSQL数据使用指令和引擎连接数据库实例

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: 【5月更文挑战第8天】本文介绍了MongoDB的本地使用和常用操作,包括通过mongo shell连接数据库、显示数据库和集合,以及副本集设置。最后提到了MongoDB的日志功能和顶点集的使用,如capped collection的创建和管理。

1 本地使用,mongo shell指令

在安装路径,使用控制台执行 mongo.exe, 自动连接127.0.0.1:27017

  db   # 显示当前数据库
  show dbs # 显示当前所有数据库和使用空间。

  db.adminCommand( { listDatabases: 1 } )  # 显示所有 db
  use users  # 选择 users 数据库

查看当前数据库的所有连接集合,即关系型数据库的表

    show collections   

副本集设置 replSet, windows是在安装目录下 mongod.exe

  mongod --port 27017 --dbpath " \MongoDB\backup\data" --replSet rs0

2 常用操作

  • 管道 pipeline: 所有 在 1970-01-01出生的人

    var pipeline =3D [
    {"$unset": [
      "_id",
      "address",
    ]},   =20
     =20
    // Only match people born on or after 1st January 1970
    {"$match": {
      "dateofbirth": {"$gte": ISODate("1970-01-01T00:0=0:00Z")},
    }},
    

    =20

    /*
    {"$sort": {
      "dateofbirth": -1,
    }},     =20
     =20
    {"$limit": 2}, =20
    */
    ];
    
  • 小于某个值的数据

表达式 $$NOW 筛选全部年龄低于18的人 $lt var pipeline =3D [ {"$match": {"$expr":{ "$lt": ["$dateofbirth", {"$subtract": [= "$$NOW", 18<=/span>365.25246060*1000]}]
}},
},

  • 大于某个值的数据
    匹配产品价格大于 15.00 的商品。

    $gt
    
    {"$match": {
      "products.price": {
        "$gt": NumberDecimal("15.00"),
      },
    }},
    

3 连接管理

我们先不理会连接池。 创建单个连接需要哪些步骤,如果从传输层连接开始,那么将很漫长。
所以这里只看第三方库如何创建和管理的连接。

使用连接库: pymongo操作, 指令是从右到左顺序执行的。

  • pymongo代码指令

    创建连接

     cli = pymongo.MongoClient('127.0.0.1', 27017)
    

    创建数据库test

       db = cli.test
       db.name
       test
    

    查看连接属性

    db.my_collection
    
    Collection(Database(MongoClient(host=['127.0.0.1:27017'], document_class=dict, tz_aware=False, connect=True), 'test'), 'my_collection')
    

4 查询指令

查询最近N个数据,按create_time由近及远排序

  db.history_vedio_info.find().limit(10).sort({"create_time":-1})

查询最近5个

  db.history_vedio_info.find().limit(5).sort({"create_time":-1})   

模糊查询, 中间匹配

  db.history_vedio_info.find({"start_time":/2020-12-17/}).sort({"create_time":-1}).count()   

模糊查询 以 2020-12-17 开头的

  db.user.find(name:/^2020-12-17/);    

模糊查询不区分大小写

  db.user.find(name:/a/i);           
  • 去重

    字段去重

      db.getCollection("表名").distinct("字段名");   
    

    某字段的按条件去重

      db.getCollection("表名").distinct('字段名',{筛选条件})  
    

    嵌入字段去重

       db.getCollection("distinct").distinct("article_numbers.vol")
    

    去重后统计

      db.student.distinct("name",{"age" : 18}).length
    

    表名去重

      db.collection.distinct() 
    

    聚合查询

    db.student.aggregate([
    {$match:{"age" : 18}},
    {$project:{"name":true}},
    {$group:{_id:"$name"}},
    {$group:{_id:null,count:{$sum:1}}}
    ])

    • 查询表

    socket_users 中所有name 并隐藏id,美观显示, and 关键字两个条件同时满足

     db.socket_users.find({$and:[{"name":"jack", "id":3}]}).pretty()
    

    投影查询,with projection is as follows , 即只显示集合的某一部分 只显示文档的title部分,

    db.mycol.find({}, {"title":1, _id:0})    
    

查询限制 limit 和 查询跳跃 skip

 db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)

只显示第二个文档

 db.COLLECTION_NAME.find().limit(1).skip(1)   

最近5个

 db.history_vedio_info.find().limit(5).sort({"create_time":-1})   
  • 查询排序

    1表示升序索引
    查询收集集合的数据按title升序排列

    db.COLLECTION_NAME.find().sort({“title”:1})   
    

-1 降序索引

多个字段索引,title 1 升序索引,description -1 降序索引

 db.mycol.createIndex({"title":1,"description":-1})   
  • 聚合查询

    db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
    

显示一个列表,显示每个用户编写了多少教程

  db.mycol.aggregate([{$group:{_id:"$by_user", num_tutorial:{$sum:1}}}])   

5 写入数据

插入一条数据

  db.my_collection.insert_one({"x":10}).inserted_id
      ObjectId('5fa0e195be9d31bf346b0c75')

插入两条相同数据,mongodb 默认id是hash自增的

  db.my_collection.insert_one({"x":110}).inserted_id   
   ...
  db.my_collection.insert_one({"x":110}).inserted_id  

查找最近的一条数据

    db.my_collection.find_one() 
       {'_id': ObjectId('5fa0e210be9d31bf346b0c77'), 'x': 110}

查找全部数据并遍历,升序排序

 for item in db.my_collection.find().sort("x", pymongo.ASCENDING):
         print(item["x"])

  10
  101
  110
  110
  1034

查找数据x并按x排序,默认升序

[item["x"] for item in db.my_collection.find().sort("x")]  
    [10, 101, 110, 110, 1034]
  [item["x"] for item in db.my_collection.find().sort("x", pymongo.ASCENDING)]
    [10, 101, 110, 110, 1034]  
  • 从查询的所有数据中 跳过第一个数,并限取两个数

    [item["x"] for item in db.my_collection.find().limit(2).skip(1)]

     [10, 101]
    

6 pymongo 常用操作

创建客户端

  import pymongo
  client = pymongo.MongoClient(host='localhost', port=27017)

指定数据库

   db = client.test

或者

   db = client['test']

指定集合(表)

    collection = db.students 

    collection = db['students']

插入数据

  student = {
    'id': '20170101',
    'name': 'Jordan',
    'age': 20,
    'gender': 'male'
  }
  result = collection.insert(student)

插入多条数据,传入列表即可

  students = [{
    'id': '20170101',
    'name': 'Jordan',
    'age': 20,
    'gender': 'male'
  }, {
    'id': '20170102',
    'name': 'Jordans',
    'age': 21,
    'gender': 'male'
  }]
  result = collection.insert(students)
  • 更新,指定更新的条件和更新后的数据即可

      condition = {"name":"Kexin"}
      student = collection.find_one(condition)
      student['age'] = 25
      result = collection.update(condition, student)
      print(result)
    
    {'ok': 1, 'nModified': 1, 'n': 1, 'updatedExisting': True}   # ok代表执行成功,nModified代表影响的数据条数
    

    $set

    使用 \$set可以只更新student字典内存在的字段。如果原先还有其他字段,则不会更新,也不会删除。

    而如果不用\$set的话,则会把之前的数据全部用student字典替换;如果原本存在其他字段,则会被删除

      res = collection.update(condition, {'$set':student})
    

7 删除

删除示例,某字段相同的所有记录

  db.info.aggregate([
{
$group:{_id:{web_url:"$web_url"},count:{$sum:1},dups:{$addToSet:"$_id"}}
},
{
$web_url:{count:{$gt:1}}
}
]).forEach(function(doc){
doc.dups.shift();
db.info.remove({_id:{$in:doc.dups}});
})

8 小结

mongdb可用于写日志,有现成的 参数可用,而不必 组织后端日志知识。

除了这些性能因素之外,日志数据是通常可以利用无模式集合的数据集之一。

mongodb 拥有一项 功能称为 顶点集。 capped collection.
我们创建的所有隐式创建的集合都只是普通的集合。

我们可以使用 db.createCollection 创建一个顶点集合。

如下示例,并将其标记为上限1M:

db.createCollection('logs', {capped: true,size: 1048576})

当顶点集到达限制,1MB后,旧的文档 立即被清理掉。

文件的大小,限制都可使用 MAX指定。

顶点集有一些有用的属性

比如 更新 顶点集的 文档而不必改变其 大小。

像tail 一个linux文件一样,tail 顶点集中的文档。

expire 可设置一个文档的 生存时间,就像TTL一样。

目录
相关文章
|
11天前
|
SQL 存储 运维
从建模到运维:联犀如何完美融入时序数据库 TDengine 实现物联网数据流畅管理
本篇文章是“2024,我想和 TDengine 谈谈”征文活动的三等奖作品。文章从一个具体的业务场景出发,分析了企业在面对海量时序数据时的挑战,并提出了利用 TDengine 高效处理和存储数据的方法,帮助企业解决在数据采集、存储、分析等方面的痛点。通过这篇文章,作者不仅展示了自己对数据处理技术的理解,还进一步阐释了时序数据库在行业中的潜力与应用价值,为读者提供了很多实际的操作思路和技术选型的参考。
24 1
|
15天前
|
存储 Java easyexcel
招行面试:100万级别数据的Excel,如何秒级导入到数据库?
本文由40岁老架构师尼恩撰写,分享了应对招商银行Java后端面试绝命12题的经验。文章详细介绍了如何通过系统化准备,在面试中展示强大的技术实力。针对百万级数据的Excel导入难题,尼恩推荐使用阿里巴巴开源的EasyExcel框架,并结合高性能分片读取、Disruptor队列缓冲和高并发批量写入的架构方案,实现高效的数据处理。此外,文章还提供了完整的代码示例和配置说明,帮助读者快速掌握相关技能。建议读者参考《尼恩Java面试宝典PDF》进行系统化刷题,提升面试竞争力。关注公众号【技术自由圈】可获取更多技术资源和指导。
|
18天前
|
前端开发 JavaScript 数据库
获取数据库中字段的数据作为下拉框选项
获取数据库中字段的数据作为下拉框选项
50 5
|
2月前
|
数据库 C# 开发者
ADO.NET连接到南大通用GBase 8s数据库
ADO.NET连接到南大通用GBase 8s数据库
|
2月前
|
数据库连接 Linux Shell
Linux下ODBC与 南大通用GBase 8s数据库的无缝连接配置指南
本文详细介绍在Linux系统下配置GBase 8s数据库ODBC的过程,涵盖环境变量设置、ODBC配置文件编辑及连接测试等步骤。首先配置数据库环境变量如GBASEDBTDIR、PATH等,接着修改odbcinst.ini和odbc.ini文件,指定驱动路径、数据库名称等信息,最后通过catalog.c工具或isql命令验证ODBC连接是否成功。
|
2月前
|
JSON JavaScript 关系型数据库
node.js连接GBase 8a 数据库 并进行查询代码示例
node.js连接GBase 8a 数据库 并进行查询代码示例
|
2月前
|
数据库连接 数据库 C#
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(上)
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(上)
|
2月前
|
数据库连接 数据库 C#
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(下)
本文接续前文,深入讲解了在Windows环境下使用C#和ADO.NET操作南大通用GBase 8s数据库的方法。通过Visual Studio 2022创建项目,添加GBase 8s的DLL引用,并提供了详细的C#代码示例,涵盖数据库连接、表的创建与修改、数据的增删查改等操作,旨在帮助开发者提高数据库管理效率。
|
19天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
45 3
|
19天前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
47 3