MongoDB 学习笔记

mongodb
数据库
nosql

一、数据库的基本概念及操作

SQL术语/概念 MongoDB术语/概念 解释/说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins 表连接,MongoDB不支持
primary key primary key 主键,MongoDB自动将_id字段设置为主键
  • 创建数据库
  1. > use mydb 

  • 查看当前连接的数据库
  1. > db 


  2. -> mydb 

  • 查看所有的数据库
  1. > show dbs 


  2. -> mydb 

  • 销毁数据库
  1. > use local 

  2. switched to db local 

  3. > db.dropDatabase() 

二、集合(Collection)的基本操作

  • 创建集合
  1. > db.creationCollection('users') 

  • 查看创建的集合
  1. > show collections 

  • 删除集合
  1. > db.users.drop() 

  • 向集合中插入数据

1.insert()
插入数据时,如果 users 集合没有创建会自动创建。

  1. > use mydb 

  2. switched to db mydb 

  3. > db.users.insert([ 

  4. ... { name : "jam", 

  5. ... email : "jam@qq.com" 

  6. ... }, 

  7. ... { name : "tom", 

  8. ... email : "tom@qq.com" 

  9. ... } 

  10. ... ]) 

2.使用 save()
插入数据时,如果 users 集合没有创建会自动创建。

  1. > use mydb2 

  2. switched to db mydb2 

  3. > db.users.save([ 

  4. ... { name : "jam", 

  5. ... email : "jam@qq.com" 

  6. ... }, 

  7. ... { name : "tom", 

  8. ... email : "tom@qq.com" 

  9. ... } 

  10. ... ]) 

  • 更新数据
    db.COLLECTION_NAME.update(SELECTION_CRITERIA,UPDATED_DATA)
  1. > use mydb2 

  2. switched to db mydb2 

  3. > db.mysb2.update({'name':'jam'},{'name':'bob'}) 

  • 删除数据
    db.COLLECTION_NAME.remove(DELECTION_CRITERIA)
  1. > use mydb2 

  2. switched to db mydb2 

  3. > db.mydb2.remove({'name':'tom'}) 

操作语句 作用
db.createCollection('COLLECTION_NAME') 创建集合
db.COLLECTION.drop() 删除集合
db.COLLECTION_NAME.insert(document) 插入文档
db.COLLECTION_NAME.update(SELECTION_CRITERIA,UPDATED_DATA) 更新文档
db.COLLECTION_NAME.save({_id:ObjectId(),NEW_DATA}) 替换已存在的文档
db.COLLECTION_NAME.remove(DELECTION_CRITERIA) 删除文档

三、数据查询

  • find() 语句
  1. > use mydb 

  2. switched to db mydb 

  3. > db.mydb.insert({'name':'mars','age':12,'gender':'man'}) 

1.不加参数时返回所有记录

  1. > db.mydb.find() 

  2. { "_id" : ObjectId("589dc5f3e86d38da8455b314"), "name" : "marsggbo" } 

  3. { "_id" : ObjectId("589dcac5e86d38da8455b315"), "name" : "mars", "age" : 12, "gender" : "man" } 

2.带参数

  1. > use mydb 

  2. > db.mydb.find({'name':'mars'}) 

  3. { "_id" : ObjectId("589dcac5e86d38da8455b315"), "name" : "mars", "age" : 12, "gender" : "man" } 

2.1 条件操作符1

(>) 大于 - $gt #greate
(<) 小于 - $lt #low
(>=) 大于等于 - $gte #equal
(<= ) 小于等于 - $lte

2.2 条件操作符2

  • type
  1. $type 

type的值:

双精度型-1
字符串-2
对象-3
数组-4
二进制数据-5
对象ID-7
布尔类型-8
数据-9
空-10
正则表达式-11
JS代码-13
符号-14
有作用域的JS代码-15
32位整型数-16
时间戳-17
64位整型数-18
Min key-255
Max key-127

范例:

  1. > use student 

  2. switched to db student 

  3. > db.student.find({"name":{$type:2}}) 

查找name是字符串的文档记录

  • limit和skip

limit:读取指定数量的数据记录 -limit
skip:读取时跳过指定数量的数据记录

首先查看student集合中年龄大于20的数据

  1. > use student 

  2. switched to db student 

  3. > db.student.find({'age':{$gt:20}}) 

  4. { "_id" : ObjectId("589dcf6d6ac83b9ae69f63e6"), "name" : "z", "sex" : "m 

  5. an", "age" : 23 } 

  6. { "_id" : ObjectId("589dcf8f6ac83b9ae69f63e8"), "name" : "z", "sex" : "m 

  7. an", "age" : 29 } 

  8. { "_id" : ObjectId("589dd11ce3b6b824fd0620e9"), "age" : 22, "name" : "ab 

  9. ", "sex" : "woman" } 

限制只显示一个数据后,默认显示最前面的数据
(第一行命令不用重复编写,这里是因为markdown解析非得加上这句话才能高亮。。。)

  1. > use student 

  2. switched to db student 


  3. > db.student.find({'age':{$gt:20}}).limit(1) 

  4. { "_id" : ObjectId("589dcf6d6ac83b9ae69f63e6"), "name" : "z", "sex" : "m 

  5. an", "age" : 23 } 

跳过一条数据,则可猜想显示结果为第二个数据

  1. > use student 

  2. switched to db student 


  3. > db.student.find({'age':{$gt:20}}).limit(1).skip(1) 

  4. { "_id" : ObjectId("589dcf8f6ac83b9ae69f63e8"), "name" : "z", "sex" : "m 

  5. an", "age" : 29 } 

  • pretty() 语句
    作用是使查询输出的结果更美观
  1. > use mydb 

  2. > db.mydb.find().pretty() 

  3. { "_id" : ObjectId("589dc5f3e86d38da8455b314"), "name" : "marsggbo" } 



  4. "_id" : ObjectId("589dcac5e86d38da8455b315"), 

  5. "name" : "mars", 

  6. "age" : 12, 

  7. "gender" : "man" 



  • sort() 排序

与sqlite中的排序一样有升序和降序,其中升序用1表示,降序用-1表示

示例

  1. > use student 

  2. switched to db student 

  3. > db.student.find().sort({'age':1}) 

  4. { "_id" : ObjectId("589dcf866ac83b9ae69f63e7"), "name" : "z", "sex" : "f 

  5. eman", "age" : 19 } 

  6. { "_id" : ObjectId("589dd11ce3b6b824fd0620e9"), "age" : 22, "name" : "ab 

  7. ", "sex" : "woman" } 

  8. { "_id" : ObjectId("589dcf6d6ac83b9ae69f63e6"), "name" : "z", "sex" : "m 

  9. an", "age" : 23 } 

  10. { "_id" : ObjectId("589dcf8f6ac83b9ae69f63e8"), "name" : "z", "sex" : "m 

  11. an", "age" : 29 } 

总结:
可以使用find进行查询,sort用于排序,ensureIndex用于建立索引,aggregate用于聚合。

原文出处:marsggbo的博客

MongoDB 学习笔记(原创)的更多相关文章

  1. MongoDB学习笔记系列

    回到占占推荐博客索引 该来的总会来的,Ef,Redis,MVC甚至Sqlserver都有了自己的系列,MongoDB没有理由不去整理一下,这个系列都是平时在项目开发时总结出来的,希望可以为各位一些帮助 ...

  2. PHP操作MongoDB学习笔记

    <?php/*** PHP操作MongoDB学习笔记*///*************************//**   连接MongoDB数据库  **////*************** ...

  3. mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)

    最后更新时间:2017-07-13 11:10:49 原始文章链接:http://www.lovebxm.com/2017/07/13/mongodb_primer/ MongoDB - 简介 官网: ...

  4. MongoDB学习笔记—权限管理

    1.MongoDB权限介绍 a 上篇文章中,我们在Linux下配置了MongoDB环境并且将其设置为服务随机器启动而启动,那么接下来这篇文章我们就来简单说一下MongoDB下对登录用户权限的管理. b ...

  5. MongoDB学习笔记~环境搭建

    回到目录 Redis学习笔记已经告一段落,Redis仓储也已经实现了,对于key/value结构的redis我更愿意使用它来实现数据集的缓存机制,而对于结构灵活,查询效率高的时候使用redis就有点不 ...

  6. MongoDB学习笔记—Linux下搭建MongoDB环境

    1.MongoDB简单说明 a MongoDB是由C++语言编写的一个基于分布式文件存储的开源数据库系统,它的目的在于为WEB应用提供可扩展的高性能数据存储解决方案. b MongoDB是一个介于关系 ...

  7. Mongodb学习笔记一(Mongodb环境配置)

    Mongodb学习 说明: MongoDB由databases组成,database由collections组成,collection由documents组成,document由fileds组成.Mo ...

  8. MongoDB学习笔记(一) MongoDB介绍及安装

    转自:http://database.51cto.com/art/201103/247882.htm http://baike.baidu.com/link?url=b6B3dVSCnQauCX-Ep ...

  9. MongoDB学习笔记

    MongoDB的学习目标(v.3.4.0) 1.MongoDB的概念,非关系型数据库NOSQL 2.学会MongoDB的搭建 3.熟悉MongoDB使用 最基本的文档的读写更新删除 各种不同类型的索引 ...

随机推荐

  1. HDFS Client 设计实现解析

    前面对 HDFS NameNode 和 DataNode 的架构设计实现要点做了介绍,本文对 HDFS 最后一个主要构成组件 Client 做进一步解析. 流式读取 HDFS Client 为客户端应 ...

  2. MySQL数据库在linux的安装,编程与操作

    一.安装 ubuntu上安装MySQL非常简单只需要几条命令就可以完成. 1. sudo apt-get install mysql-server   2. apt-get isntall mysql ...

  3. [Spring] - 读写分离

    使用Spring可以做到在应用层中实现数据库的读写分离. 参考文档: http://blog.csdn.net/lifuxiangcaohui/article/details/7280202 思路是使 ...

  4. 微信小程序全面实战,架构设计 &amp;&amp; 躲坑攻略(小程序入门捷径教程)

    最近集中开发了两款微信小程序,分别是好奇心日历(每天一条辞典+一个小投票)和好奇心日报(轻量版),直接上图: Paste_Image.png 本文将结合具体的实战经验,主要介绍微信小程序的基础知识.开 ...

  5. 从SDE库文件手工删除SDE图层(转载)

    转载自:http://gis-conquer.blog.sohu.com/164467560.html 一.前言    虽然Catalog能解决这种问题,但是在特殊情况下也许这种方法有点用途.    ...

  6. android 小知识点

    小知识点总结 1. android中MotionEvent.ACTION_CANCEL事件如何被触发? 对于这个问题,android文档的说明很简短,想看明白很难.国外一网页说的还比较详细,写在这里分 ...

  7. jQuery1.9.1源码分析--Ajax模块

    //Serialize an array of form elements or a set of //key/values into a query string // 将数组形式的表单元素或者哈希 ...

  8. Linux操作系统是如何工作的?破解操作系统的奥秘

    学号:SA12**6112 研究笔记: 1:计算机是怎么样工作的 2:用户态到内核态切换之奥秘解析 3:进程切换之奥秘解析 本博文主要是根据前3篇笔记来总结Linux内核的工作机制. 一:操作系统工作 ...

  9. Class org.apache.struts2.json.JSONWriter can not access a member of

    异常形式: Class org.apache.struts2.json.JSONWriter can not access a member of * 或是 Class com.googlecode. ...

  10. PYTHON 正则表达示入门

    确实是实践出真知,自己手打代码之后,以前停在理论上的东东,慢慢可以进入实战了. 比如,MATCH和SEARCH之间的区别. #encoding: UTF-8 import re pattern = r ...