MongoDB 使用笔记

易小灯塔
2018-05-07 / 0 评论 / 1,186 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2022年06月21日,已超过888天没有更新,若内容或图片失效,请留言反馈。

简介

非关系型数据库, 对json有良好的支持

应用场景: 监控日志, 格式不统一的数据, 内嵌的文档存储

安装

下载: https://www.mongodb.com/download-center#community

图形化界面管理工具

  • robo 3t

安装

在mangodb安装目录下创建配置文件mongo.cfg, 设置日志文件和数据库存储路径

systemLog:
    destination: file
    path: D:\DevelopTools\mongodb\logs\mongodb.log
storage:
    dbPath: D:\DevelopTools\mongodb\data

安装 MongoDB服务

通过执行mongod.exe,使用--install选项来安装服务,使用--config选项来指定之前创建的配置文件。

mongod.exe --config "D:\DevelopTools\mongodb\mongo.cfg" --install

启动MongoDB服务

net start MongoDB

关闭MongoDB服务

net stop MongoDB

移除 MongoDB 服务

mongod.exe --remove

启动mangodb客户端

mongo

默认端口为: 27017

数据表和集合操作

链接数据库

 mongodb://admin:123456@localhost/data1

显示数据库

show dbs

进入数据库

use 指定数据库

创建数据库: 没有newdata则创建, 有则进入

use newdata

删除数据库

use newdata
db.dropDatabase()

查看当前集合

show collections

创建集合

db.createCollection(name, options)

参数说明:

  • name: 要创建的集合名称
  • options: 可选参数, 指定有关内存大小及索引的选项

删除集合

db.collection.drop()

数据操作

新增数据

插入数据

db.newdata.insert({"键":"值"})

如果中文提示错误

2018-03-19T11:46:07.875+0800 E QUERY    [thread1] malformed UTF-8 character sequence at offset 24

先设置cmd的编码

chcp 65001

插入文档

db.COLLECTION_NAME.insert(document)
或
db.COLLECTION_NAME.save(document)
  • save():如果 _id 主键存在则更新数据,如果不存在就插入数据。该方法新版本中已废弃,可以使用 db.collection.insertOne()db.collection.replaceOne() 来代替。
  • insert(): 若插入的数据主键已经存在,则会抛 org.springframework.dao.DuplicateKeyException 异常,提示主键重复,不保存当前数据。

db.collection.insertOne() 用于向集合插入一个新文档,语法格式如下:

db.collection.insertOne(
   <document>,
   {
      writeConcern: <document>
   }
)

db.collection.insertMany() 用于向集合插入一个多个文档,语法格式如下:

db.collection.insertMany(
   [ <document 1> , <document 2>, ... ],
   {
      writeConcern: <document>,
      ordered: <boolean>
   }
)

参数说明:

  • document:要写入的文档。
  • writeConcern:写入策略,默认为 1,即要求确认写操作,0 是不要求。
  • ordered:指定是否按顺序写入,默认 true,按顺序写入。

可以为数据添加一个变量再插入

> document=({title: 'MongoDB 教程', 
    description: 'MongoDB 是一个 Nosql 数据库',
    by: 'insmoin',
    url: 'http://www.insmoin.com',
    tags: ['mongodb', 'database', 'NoSQL'],
    likes: 100
});

db.col.insert(document)

查找数据

查看数据

db.newdata.find()
show dbs
db.collection.find(query, projection)
  • query :可选,使用查询操作符指定查询条件
  • projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。

除了 find() 方法之外,还有一个 findOne() 方法,它只返回一个文档。

如果你熟悉常规的 SQL 数据,通过下表可以更好的理解 MongoDB 的条件语句查询:

操作格式范例RDBMS中的类似语句
等于{<key>:<value>}db.col.find({"by":"菜鸟教程"}).pretty()where by = '菜鸟教程'
小于{<key>:{$lt:<value>}}db.col.find({"likes":{$lt:50}}).pretty()where likes < 50
小于或等于{<key>:{$lte:<value>}}db.col.find({"likes":{$lte:50}}).pretty()where likes <= 50
大于{<key>:{$gt:<value>}}db.col.find({"likes":{$gt:50}}).pretty()where likes > 50
大于或等于{<key>:{$gte:<value>}}db.col.find({"likes":{$gte:50}}).pretty()where likes >= 50
不等于{<key>:{$ne:<value>}}db.col.find({"likes":{$ne:50}}).pretty()where likes != 50

MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,即常规 SQL 的 AND 条件。

语法格式如下:

>db.col.find({key1:value1, key2:value2}).pretty()

ongoDB OR 条件语句使用了关键字 $or,语法格式如下:

>db.col.find(
   {
      $or: [
         {key1: value1}, {key2:value2}
      ]
   }
).pretty()

修改数据

update() 方法用于更新已存在的文档。语法格式如下:

db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)

参数说明:

  • query : update的查询条件,类似sql update查询内where后面的。
  • update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
  • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
  • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
  • writeConcern :可选,抛出异常的级别。

删除数据

remove() 方法的基本语法格式如下所示:

db.collection.remove(
   <query>,
   <justOne>
)

如果你的 MongoDB 是 2.6 版本以后的,语法格式如下:

db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }
)

参数说明:

  • query :(可选)删除的文档的条件。
  • justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
  • writeConcern :(可选)抛出异常的级别。

如果你只想删除第一条找到的记录可以设置 justOne 为 1,如下所示:

>db.COLLECTION_NAME.remove(DELETION_CRITERIA,1)

其他操作

条件判断

MongoDB中条件操作符有:

  • (>) 大于 - $gt
  • (<) 小于 - $lt
  • (>=) 大于等于 - $gte
  • (<= ) 小于等于 - $lte

排序

在 MongoDB 中使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。

>db.COLLECTION_NAME.find().sort({KEY:1})

索引

MongoDB使用 createIndex() 方法来创建索引。

注意在 3.0.0 版本前创建索引方法为 db.collection.ensureIndex(),之后的版本使用了 db.collection.createIndex() 方法,ensureIndex() 还能用,但只是 createIndex() 的别名。

语法

createIndex()方法基本语法格式如下所示:

>db.collection.createIndex(keys, options)

Python使用MongoDB

安装驱动 PyMongo

 pip3 install pymongo

使用

import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["skin"]
mycol = mydb["skin"]

mcol.find_one()

for i in mcol.find():
    print(i)

插入数据

mcol.insert_one(onedata) # 
mcol.insert_many(datas) #插入多个数据

查询数据

d = mcol.find({"id":"1545"})
for i in d:
    print(i)
0

评论 (0)

取消