MongoDB基本操作

数据库基本操作

网易公开课-MongoDB数据库学习笔记

# use study,并不会创建数据库,只有在数据保存之后才会创建
>use study
# 创建集合
>db.createCollection("emp")
# 此时再次查看数据库,才会看到study已经创建
>show dbs

# 实际在使用的过程中,不会特意先创建集合,而是直接在集合中插入数据,mongodb会自动创建
>db.dept.insert({"deptno": 10, "dname": "财务部", "loc": "北京"})
# 此时MongoDB会自动创建一个dept的集合,并插入一条数据
# MongoDB数据库的集合结构很灵活,无模式集合。

# 查看集合内容
# 语法: db.集合名词.find({若干条件})
>db.dept.find()
{ "_id" : ObjectId("586a562f87e00ea77b041b67"), "deptno" : 10, "dname" : "财务部", "loc" : "北京" }

# ID "时间戳 + 机器码 + PID + 计数器",肯定不会重复
# 查找某个具体实例
>db.dept.find({"_id" : ObjectId("586a57b287e00ea77b041b69")})
>db.dept.findOne()
# 删除数据
# db.集合名词.remove({条件})
>db.dept.remove({"_id" : ObjectId("586a57b287e00ea77b041b69")})

# 更新数据
# db.集合名词.update({条件}, {更新后的数据})
>db.dept.update({"_id" : ObjectId("586a562f87e00ea77b041b67")}, {"loc": "上海"})
# 删除集合
# db.集合名词.drop()
db.dept.drop()
# 删除数据库(删除当前所在的数据库)
db.dropDatabase()

数据插入

# 增加单条数据
# db.集合.insert({数据json})
# 增加多条数据,数组形式
# db.集合.insert([{},{}])
# 批量数据javascript语法
for (var x = 0; x < 100; x ++) {
    db.infos.insert({"url": "xxx" + x})
}

数据查询

# db.集合名词.find({查询条件},{显示字段})
# {查询条件},json格式
>db.infos.find({"url": "wwww.baidu.com"})
#{显示字段}:数据的投影操作,需要显示的字段设置为1,不显示的设置为0
>db.infos.find({},{"_id": 0})
# pretty显示,格式化的输出效果
db.infos.find({},{"_id": 0}).pretty()

数据集

# 测试数据集
>db.students.drop()
>db.students.insert({"name": "张三", "sex": "男", "age": 19, "score": 89, "address": "海淀区"})
>db.students.insert({"name": "李四", "sex": "女", "age": 20, "score": 59, "address": "朝阳区"})
>db.students.insert({"name": "王五", "sex": "女", "age": 19, "score": 99, "address": "西城区"})
>db.students.insert({"name": "赵六", "sex": "男", "age": 20, "score": 100, "address": "东城区"})
>db.students.insert({"name": "孙七", "sex": "男", "age": 19, "score": 20, "address": "海淀区"})
>db.students.insert({"name": "王八", "sex": "女", "age": 21, "score": 0, "address": "海淀区"})
>db.students.insert({"name": "刘九", "sex": "男", "age": 19, "score": 70, "address": "朝阳区"})
>db.students.insert({"name": "钱十", "sex": "女", "age": 21, "score": 56, "address": "西城区"})
>db.students.insert({"name": "数组-A", "sex": "女", "age": 21, "score": 56, "address": "西城区", "course": ["语文", "数学", "英语", "音乐", "政治"]})
>db.students.insert({"name": "数组-B", "sex": "女", "age": 21, "score": 56, "address": "西城区", "course": ["语文", "数学", "英语"]})
>db.students.insert({"name": "数组-C", "sex": "女", "age": 21, "score": 56, "address": "西城区", "course": ["语文", "政治"]})
>db.students.insert({"name": "数组-D", "sex": "女", "age": 21, "score": 56, "address": "西城区", "course": ["英语", "音乐", "政治"]})
>db.students.insert({"name": "嵌套-A", "sex": "女", "age": 21, "score": 56, "address": "西城区", "course": ["英语", "音乐", "政治"], "parents": [{"name": "父亲A", "job": "工人"}, {"name": "母亲A", "job": "员工"}]})
>db.students.insert({"name": "嵌套-B", "sex": "女", "age": 21, "score": 56, "address": "西城区", "course": ["英语", "音乐", "政治"], "parents": [{"name": "父亲B", "job": "局长"}, {"name": "母亲B", "job": "职员"}]})

关系运算

# 支持的关系操作 等于,大于($gt), 小于($lt),大于等于($gte),小于等于($lte),不等于($ne)
# 等于查询
>db.students.find({"name": "张三"}).pretty()
{
    "_id" : ObjectId("586bbc0885913b9e29437679"),
    "name" : "张三",
    "sex" : "男",
    "age" : 19,
    "score" : 89,
    "address" : "海淀区"
}
# 大于
>db.students.find({"age": {"$gt": 19}}).pretty()
# 大于等于
>db.students.find({"score": {"$gte": 60}}).pretty()
# 不等于
>db.students.find({"name": {"$ne":"张三"}}).pretty()

逻辑运算

# 支持的逻辑运算 与($and) 或($or) 非($nor)
# 与操作 and连接 查询19~20岁的学生
>db.students.find({"age": {"$gte": 19, "$lte": 20}}).pretty()
# 或 or
>db.students.find({"$or": [{"age": {"$gt": 19}}, {"score": {"$gt": 90}}]}).pretty()
# 非
>db.students.find({"$nor": [{"age": {"$gt": 19}}, {"score": {"$gt": 90}}]}).pretty()

求模运算

> db.students.find({"age": {"$mod" : [20, 1]}}).pretty()
{
    "_id" : ObjectId("586bbc0885913b9e2943767e"),
    "name" : "王八",
    "sex" : "女",
    "age" : 21,
    "score" : 0,
    "address" : "海淀区"
}
{
    "_id" : ObjectId("586bbc0985913b9e29437680"),
    "name" : "钱十",
    "sex" : "女",
    "age" : 21,
    "score" : 56,
    "address" : "西城区"
}

范围查询

# $in , $nin
>db.students.find({"name": {"$in": ["张三", "李四","王五"]}}).pretty()
>db.students.find({"name": {"$nin": ["张三", "李四","王五"]}}).pretty()

数组运算

# $all, $size, $slice, $elemMatch
# 所有学生信息里面,包含语文,数学
>db.students.find({"course": {"$all": ["语文", "数学"]}}).pretty()
>db.students.find({"address": {"$all": ["海淀区"]}}).pretty()
# 数组下标查询
>db.students.find({"course.1": "数学"}).pretty()
#只参加两门课程
>db.students.find({"course": {"$size": 2}}).pretty()
# 只显示前两门
>db.students.find({"age": 21}, {"course": {"$slice": 2}}).pretty()
>db.students.find({"age": 21}, {"course": {"$slice": -2}}).pretty()
# $slice: [start_index, length]
>db.students.find({"age": 21}, {"course": {"$slice": [1, 2]}}).pretty()
# 嵌套符合
>db.students.find({"$and": [{"age": {"$gt": 20}}, {"parents": {"$elemMatch": {"job": "局长"}}}]}).pretty()

是否存在

# exists, 数据过滤
> db.students.find({"parents": {"$exists": true}}).pretty()

条件过滤

# 能利用JavaScript,但是不方便使用索引
>db.students.find({"$where": "this.age > 20"}).pretty()
>db.students.find("this.age > 20").pretty()
>db.students.find(function() {return this.age > 20 && this.age <= 21}).pretty()

正则运算

#模糊查询,必须使用正则表达式
#Perl兼容的正则表达式
#{key: 正则标记}
# {key: {"$regex": 正则标记, "$options": 选项}}, 
# options: "i": 忽略字母大小写  "m" 多行查找 "x": 空白字符串除了被转义的或在字符串中意外的完全被忽略 "s": 匹配所有字符(圆点.),包括换行内容
>db.students.find({"name":  /数组/}).pretty()
>db.students.find({"name":  /a/i}).pretty()  # 不区分大小写
>db.students.find({"name":  {"$regex": /a/i}}).pretty()
>db.students.find({"course":  /语/}).pretty()

数据排序

# sort()函数 升序(1) 降序(-1)
>db.students.find().sort({"score": 1}).pretty()
>db.students.find().sort({"score": -1}).pretty()
# nature 自然排序
>db.students.find().sort({"$nature": 1}).pretty()

数据分页

# skip(n)跨过多少数据
# limit(n)取多少数据
>db.students.find().skip(2).limit(5).pretty()

数据更新操作

# mongodb更新非常麻烦,最好的做法是:先删后重新插入

数据删除

# remove()函数
# db.集合.remove()
>db.students.remove({})
>db.students.remove({"name": /数组/})
>db.students.remove({"name": /数组/}, 1)  # 只删除符合条件的1个
>db.students.drop()  # 删除结婚

游标

# hasNext() next()
>var cursor = db.students.find()
>cursor.hasNext()
>cursor.next()
while(cursor.hasNext()) {
    var doc = cursor.next()
    printjson(doc)
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容

  • 安装 配置环境 mongodb安装完毕后,默认安装路径在/usr/local/Cellar/mongodb/3.4...
    bd4d0d78f248阅读 5,730评论 0 53
  • 创建数据库 打印数据库列表 ** MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放...
    陈小陌丿阅读 264评论 0 0
  • 原文链接 安装/卸载MongoDB 查看MongoDB版本信息 开启/关闭MongoDB服务 查看MongoDB是...
    sssnowyue阅读 236评论 0 0
  • 系统相关 安装MongoDB 启动MongoDB服务器 连接MongoDB服务器,启动客户端 数据库相关 创建数据...
    DongGuangqing阅读 242评论 0 0
  • 创建数据库 创建数据库 查看数据库 新创建的数据库不不在数据库的列表中,要显示它,需要插入一些数据 MongoDB...
    NoFacePeace阅读 110评论 0 0