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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 Tair(兼容Redis),内存型 2GB
简介: 【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一样。

目录
相关文章
|
27天前
|
存储 监控 数据处理
flink 向doris 数据库写入数据时出现背压如何排查?
本文介绍了如何确定和解决Flink任务向Doris数据库写入数据时遇到的背压问题。首先通过Flink Web UI和性能指标监控识别背压,然后从Doris数据库性能、网络连接稳定性、Flink任务数据处理逻辑及资源配置等方面排查原因,并通过分析相关日志进一步定位问题。
157 61
|
25天前
|
数据库 C# 开发者
ADO.NET连接到南大通用GBase 8s数据库
ADO.NET连接到南大通用GBase 8s数据库
|
24天前
|
数据库连接 Linux Shell
Linux下ODBC与 南大通用GBase 8s数据库的无缝连接配置指南
本文详细介绍在Linux系统下配置GBase 8s数据库ODBC的过程,涵盖环境变量设置、ODBC配置文件编辑及连接测试等步骤。首先配置数据库环境变量如GBASEDBTDIR、PATH等,接着修改odbcinst.ini和odbc.ini文件,指定驱动路径、数据库名称等信息,最后通过catalog.c工具或isql命令验证ODBC连接是否成功。
|
25天前
|
关系型数据库 MySQL 数据库
GBase 数据库如何像MYSQL一样存放多行数据
GBase 数据库如何像MYSQL一样存放多行数据
|
1月前
|
存储 缓存 NoSQL
常见的 NoSQL 数据库有哪些?
常见的 NoSQL 数据库有哪些?
47 2
|
1月前
|
关系型数据库 分布式数据库 数据库
云栖大会|从数据到决策:AI时代数据库如何实现高效数据管理?
在2024云栖大会「海量数据的高效存储与管理」专场,阿里云瑶池讲师团携手AMD、FunPlus、太美医疗科技、中石化、平安科技以及小赢科技、迅雷集团的资深技术专家深入分享了阿里云在OLTP方向的最新技术进展和行业最佳实践。
|
23天前
|
JSON JavaScript 关系型数据库
node.js连接GBase 8a 数据库 并进行查询代码示例
node.js连接GBase 8a 数据库 并进行查询代码示例
|
24天前
|
数据库连接 数据库 C#
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(上)
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(上)
|
24天前
|
数据库连接 数据库 C#
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(下)
本文接续前文,深入讲解了在Windows环境下使用C#和ADO.NET操作南大通用GBase 8s数据库的方法。通过Visual Studio 2022创建项目,添加GBase 8s的DLL引用,并提供了详细的C#代码示例,涵盖数据库连接、表的创建与修改、数据的增删查改等操作,旨在帮助开发者提高数据库管理效率。
|
1月前
|
关系型数据库 MySQL 数据库
【赵渝强老师】启动与关闭MySQL数据库实例
MySQL数据库安装完成后,可以通过命令脚本启动、查看状态、配置开机自启、查看自启列表及关闭数据库。本文提供了详细的操作步骤和示例代码,并附有视频讲解。
下一篇
DataWorks