西安市建设网站,公司建设网站重要性,制作公司网站备案需要提供什么资料,重庆市建设工程造价管理协会官网mongodb快速搭建及使用 1.mongodb安装1.1 docker安装启动mongodb 2.mongo shell常用命令2.1 插入文档2.1.1 插入单个文档2.1.2 插入多个文档2.1.3 用脚本批量插入 2.2 查询文档 前言#xff1a;本篇默认你是对nongodb的基础概念有了了解#xff0c;操作是非常基础的。但是与关… mongodb快速搭建及使用 1.mongodb安装1.1 docker安装启动mongodb 2.mongo shell常用命令2.1 插入文档2.1.1 插入单个文档2.1.2 插入多个文档2.1.3 用脚本批量插入 2.2 查询文档 前言本篇默认你是对nongodb的基础概念有了了解操作是非常基础的。但是与关系型数据库的类比默认你已经是了解的。 1.mongodb安装
这里为了快速使用mongodb我使用了docker安装(如果想了解linux上面的安装可以参考我的另一篇文章《mongdb下载、安装、启动》)。
1.1 docker安装启动mongodb
#拉取mongo镜像
docker pull mongo:4.4.10
#运行mongo镜像
docker run --name mongo-server -p 29017:27017 \
-e MONGO_INITDB_ROOT_USERNAMEroot\
-e MONGO_INITDB_ROOT_PASSWORDroot\
-d mongo:4.4.10 --wiredTigerCacheSizeGB 1默认情况下Mongo会将wiredTigerCacheSizeGB设置为与主机总内存成比例的值而不考虑你可能对容器施加的内存限制。 MONGO_INITDB_ROOT_USERNAME和MONGO_INITDB_ROOT_PASSWORD都存在就会启用身份认证mongod --auth #进入容器
docker exec -it mongo-server bash
#进入Mongo shell
mongo -u root-p root2.mongo shell常用命令
命令说明show dbs/show databases显示数据库列表use 数据库名切换数据库如果不存在创建数据库db.dropDatabase()删除数据库show collections/show tables显示当前数据库的集合列表db.createCollection(“集合名”)创建集合db.集合名.stats()查看集合详情db.集合名.drop()删除集合show users显示当前数据库的用户列表show roles显示当前数据库的角色列表db.createUser({user:“用户名”,pwd:“用户密码”,roles:[“角色”]})创建管理员db.dropUser(“用户名”)删除用户show profile显示近发生的操作load(“xxx.js”)执行一个JavaScript脚本文件exit /quit()退出当前shellhelp查看mongodb支持哪些命令db.help()查询当前数据库支持的方法db.集合名.help()显示集合的帮助信息db.version()查看数据库版本
2.1 插入文档
2.1.1 插入单个文档
insertOne: 支持writeConcern
db.collection.insertOne(document,{writeConcern: val}
)writeConcern 决定一个写操作落到多少个节点上才算成功。writeConcern 的取值val包括 0: 发起写操作不关心是否成功 1: 集群最大数据节点数写操作需要被复制到指定节点数才算成功 majority: 写操作需要被复制到大多数节点上才算成功 db.emps.insertOne({x:22,y:12},{writeConcern:0})insert: 若插入的数据主键已经存在则会抛 DuplicateKeyException 异常提示主键重复不保存当前数据
db.emps.insert({x:11,y:22})save: 如果 _id 主键存在则更新数据如果不存在就插入数据
db.emps.save({_id:ObjectId(65674b35fc0731432f162147),x:12,y:21})2.1.2 插入多个文档
insertMany:向指定集合中插入多条文档数据
db.collection.insertMany([ document 1 , document 2, ... ],{writeConcern: document,ordered: boolean }
)writeConcern写入策略默认为 1即要求确认写操作0 是不要求。 ordered指定是否按顺序写入默认 true按顺序写入。 db.emps.insertMany([{x:23,y:23},{x:33,y:33}],{writeConcern:0,ordered:true})2.1.3 用脚本批量插入
# 退出mongo shell
exit
# docker容器内部也是一个小型的linux环境
# 更新依赖
apt-get update
# 安装vim命令
apt-get install vimcd /data/db/
vim books.js
# 以下内容粘贴在books.js中
var tags [nosql,mongodb,document,developer,popular];
var types [technology,sociality,travel,novel,literature];
var books[];
for(var i0;i50;i){var typeIdx Math.floor(Math.random()*types.length);var tagIdx Math.floor(Math.random()*tags.length);var favCount Math.floor(Math.random()*100);var book {title: book-i,type: types[typeIdx],tag: tags[tagIdx],favCount: favCount,author: xxxi};books.push(book)
}
db.books.insertMany(books);# 进入mongo shell
mongo -u root -p root
# 加载js文件
load(books.js)2.2 查询文档
db.collection.find(query, projection)query 可选查询的条件 projection 可选使用投影操作符指定返回的键。默认省略查询时返回文档中所有键值。_id为1的时候其他字段必须是1_id是0的时候其他字段可以是0如果没有_id字段约束多个其他字段必须同为0或同为1。 # 只指定查询条件 tagnosql
db.books.find({tag:nosql})
# 指定查询条件 且 指定titleauthor不展示
db.books.find({tag:nosql},{title:0,author:0})
# 指定查询条件 且 只展示titleauthor
db.books.find({tag:nosql},{title:1,author:1})# 指定查询条件 且 只展示titleauthor隐藏_id
db.books.find({tag:mongodb},{type:1,author:1,_id:0})
# 同时指定0和1仍然会报错
db.books.find({tag:mongodb},{type:0,author:1,_id:0})
# 指定查询条件 且 指定titleauthor不展示隐藏_id
db.books.find({tag:mongodb},{type:0,author:0,_id:0})
# 指定查询条件 且 指定titleauthor不展示不隐藏_id
db.books.find({tag:mongodb},{type:0,author:0,_id:1})查询条件对照表
SQLMQLa1{a:1}a1{a:{$ne:1}}a1{a:{$gt:1}}a1{a:{$gte:1}}a1{a:{$lt:1}}a1{a:{$lte:1}}
查询逻辑对照表
SQLMQLa1and b1{a:1,b:1}或{$and:[{a:1},{b:1}]}a1or b1{$or:[{a:1},{b:1}]}a is null{a: {$exists: false}}a in (1, 2, 3){a:{$gte:1}}a1{a:{$in:[1,2,3]}}
# 查询条件 typetravel 且 favCount 40
db.books.find({type:travel,favCount:{$gt:40}})
# 查询条件 typetravel 且 favCount 40
db.books.find({$and:[{type:travel},{favCount:{$gt:40}}]})
# 查询条件 typetravel 或者 favCount 40
db.books.find({$or:[{type:travel},{favCount:{$gt:40}}]})