mongodb基本操作汇总

1.逻辑结构与关系数据库的对比:

关系型数据库

MongoDb

database(数据库)

database(数据库)

table (表)

collection( 集合)

row( 行)

document( BSON 文档)

column (列)

field (字段)

index(唯一索引、主键索引)

index (全文索引)

join (主外键关联)

embedded Document (嵌套文档)

primary key(指定1至N个列做主键)

primary key  (指定_id field做为主键)

aggreation(groupy)

aggreation (pipeline mapReduce)

2.体系结构:

.mongodb基本操作汇总_第1张图片

2.mongoDb启动参数说明

mongoDb 由C++编写,下载下来的包可以直接启动

#创建数据库目录

mkdir -p /data/mongo

# 启动mongo

./bin/mongod --dbpath=/data/mongo/

 

常规参数

参数

说明

dbpath

数据库目录,默认/data/db

bind_ip

监听IP地址,默认全部可以访问

port

监听的端口,默认27017

logpath

日志路径

logappend

是否追加日志

auth

是开启用户密码登陆

fork

是否已后台启动的方式登陆

config

指定配置文件

配置文件示例

vim mongo.conf

内容:

 

dbpath=/data/mongo/

port=27017

bind_ip=0.0.0.0

fork=true

logpath = /data/mongo/mongodb.log

logappend = true

auth=false

 

已配置文件方式启动

./bin/mongod -f mongo.conf

mongo shell 是一个js 控台,可以执行js 相关运算如:

> 1+1

2

> var i=123;

> print(i)

123

>

 

4.数据库与集合的基础操作

  #查看数据库

  show dbs;

  #切换数据库

  use luban;

  #创建数据库与集合,在插入数据时会自动 创建数据库与集和

  db.friend.insertOne({name:"wukong",sex:"man"});

  #查看集合

  show tables;

  show collections;

  #删除集合

  db.friend.drop();

  #删除数据库

  db.dropDatabase();

 

三、MongoDB CRUD与全文索引

概要:

  1. 数据的新增的方式
  2. 数据的查询
  3. 数据的修改删除
  4. 全文索引查询

 

 

  1. 数据的新增的方式

关于Mongodb数据插入的说明

  1. 数据库的新增不需要序先设计模型结构,插入数据时会自动创建。
  2. 同一个集合中不同数据字段结构可以不一样

 

插入相关方法:

//插入单条

db.friend.insertOne({name:"wukong",sex:"man"});

// 插入多条

db.friend.insertMany([

{name:"wukong",sex:"man"},{name:"diaocan",sex:"woman",age:18,birthday:new Date("1995-11-02")},{name:"zixiao",sex:"woman"}

]);

// 指定ID

 db.friend.insert([

{_id:1,name:"wokong",sex:"man",age:1},

{_id:2,name:"diaocan",sex:"women",birthday:new Date("1988-11-    11")}

  ])

 

2、数据的查询

概要:

    1. 基于条件的基础查询
    2. $and、$or、$in、$gt、$gte、$lt、$lte 运算符
    3. 基于 sort skip limit 方法实现排序与分页
    4. 嵌套查询
    5.  数组查询
    6. 数组嵌套查询

 

基础查询:

#基于ID查找

db.emp.find({_id:1101})

#基于属性查找

db.emp.find({"name":"鲁班"})

# && 运算 与大于 运算

db.emp.find({"job":"讲师","salary":{$gt:8000}})

# in 运算

 db.emp.find({"job":{$in:["讲师","客服部"]}})

# or 运算

db.emp.find({$or:[{job:"讲师"  },{job:"客服部"}] })

 

 

排序与分页:

//  sort skip limit

db.emp.find().sort({dep:1,salary:-1}).skip(5).limit(2)

 

嵌套查询:

 

# 错误示例:无结果

db.student.find({grade:{redis:87,dubbo:90 });

#错误示例:无结果

db.student.find({grade:{redis:87,dubbo:90,zookeper:85} })

 

# 基于复合属性查找 时必须包含其所有的值 并且顺序一至

db.student.find({grade:{redis:87,zookeper:85,dubbo:90} })

 

#基于复合属性当中的指定值 查找。注:名称必须用双引号

db.student.find({"grade.redis":87});

 

db.student.find({"grade.redis":{"$gt":80}});

 

 

数组查询:

db.subject.insertMany([

{_id:"001",name:"陈霸天",subjects:["redis","zookeper","dubbo"]},

{_id:"002",name:"张明明",subjects:["redis","Java","mySql"]},

{_id:"003",name:"肖炎炎",subjects:["mySql","zookeper","bootstrap"]},

{_id:"004",name:"李鬼才",subjects:["Java","dubbo","Java"]},

])

 

#无结果

db.subject.find({subjects:["redis","zookeper"]})

#无结果

db.subject.find({subjects:["zookeper","redis","dubbo"]})

# 与嵌套查询一样,必须是所有的值 并且顺序一至

db.subject.find({subjects:["redis","zookeper","dubbo"]})

 

# $all 匹配数组中包含该两项的值。注:顺序不作要求

db.subject.find({subjects:{"$all": ["redis","zookeper"]}})

注:

# 简化数组查询

db.subject.find({subjects:"redis"})

# 简化数组查询 ,匹配数组中存在任意一值。与$all相对应

db.subject.find({subjects:{$in: ["redis","zookeper"]}})

 

 

数组嵌套查询:

#基础查询 ,必须查询全部,且顺序一至

db.subject2.find({subjects:{name:"redis",hour:12} })

#指定查询第一个数组 课时大于12

db.subject2.find({"subjects.0.hour":{$gt:12}})

#查询任科目 课时大于12

db.subject2.find({"subjects.hour":{$gt:12}})

# $elemMatch 元素匹配,指定属性满足,且不要求顺序一至

db.subject2.find({subjects:{$elemMatch:{name:"redis",hour:12}}})

 

# 数组中任意元素匹配 不限定在同一个对象当中

db.subject2.find({"subjects.name":"mysql","subjects.hour":120})

 

 

 

 

修改

#设置值

db.emp.update({_id:1101} ,{ $set:{salary:10300}  })

#自增

db.emp.update({_id:1101} ,{ $inc:{salary:200}})

 

#基于条件 更新多条数据

# 只会更新第一条

db.emp.update({"dep":"客服部"},{$inc:{salary:100}})

# 更新所有 匹配的条件

db.emp.updateMany({"dep":"客服部"},{$inc:{salary:100}})

 

 

3、数据的修改与删除

修改

#设置值

db.emp.update({_id:1101} ,{ $set:{salary:10300}  })

#自增

db.emp.update({_id:1101} ,{ $inc:{salary:200}})

 

#基于条件 更新多条数据

# 只会更新第一条

db.emp.update({"dep":"客服部"},{$inc:{salary:100}})

# 更新所有 匹配的条件

db.emp.updateMany({"dep":"客服部"},{$inc:{salary:100}})

 

删除:

// 基于查找删除

db.emp.deleteOne({_id:1101})

// 删除整个集合

db.project.drop()

// 删除库

db.dropDatabase()

 

 

4、全文索引

索引的创建

db.project.createIndex({name:"text",description:"text"})

基于索引分词进行查询

db.project.find({$text:{$search:"java jquery"}})

   基于索引 短语

db.project.find({$text:{$search:"\"Apache ZooKeeper\""}})

过滤指定单词

db.project.find({$text:{$search:"java apache -阿里"}})

查看执行计划

db.project.find({$text:{$search:"java -阿里"}}).explain("executionStats")

 

 

你可能感兴趣的:(mongodb)