• MongoDB 学习笔记(原创)


    MongoDB 学习笔记

    mongodb
    数据库
    nosql

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

    SQL术语/概念MongoDB术语/概念解释/说明
    databasedatabase数据库
    tablecollection数据库表/集合
    rowdocument数据记录行/文档
    columnfield数据字段/域
    indexindex索引
    tablejoins表连接,MongoDB不支持
    primary keyprimary key主键,MongoDB自动将_id字段设置为主键
    • 创建数据库
    1. use mydb 
    • 查看当前连接的数据库
    1. > db 
    2.  
    3. -> mydb 
    • 查看所有的数据库
    1. show dbs 
    2.  
    3. -> 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.  
    4. > db.student.find({'age':{$gt:20}}).limit(1) 
    5. "_id" : ObjectId("589dcf6d6ac83b9ae69f63e6"), "name" : "z""sex" : "m 
    6. an""age" : 23 } 

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

    1. use student 
    2. switched to db student 
    3.  
    4. > db.student.find({'age':{$gt:20}}).limit(1).skip(1) 
    5. "_id" : ObjectId("589dcf8f6ac83b9ae69f63e8"), "name" : "z""sex" : "m 
    6. an""age" : 29 } 
    • pretty() 语句
      作用是使查询输出的结果更美观
    1. use mydb 
    2. > db.mydb.find().pretty() 
    3. "_id" : ObjectId("589dc5f3e86d38da8455b314"), "name" : "marsggbo" } 
    4. { 
    5.  "_id" : ObjectId("589dcac5e86d38da8455b315"), 
    6.  "name" : "mars", 
    7.  "age" : 12, 
    8.  "gender" : "man" 
    9. } 
    • 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的博客

  • 相关阅读:
    程序员必备的代码审查(Code Review)清单
    Laravel 在homestead 平台上命令
    Laravel5.5执行 npm run dev时报错,提示cross-env找不到(not found)的解决办法
    Laravel 的Artisan 命令学习
    github常见操作和常见错误!错误提示:fatal: remote origin already exists.
    Sublime如何设置背景透明
    jquery判断滚动条是否到底部
    mysql的数据恢复
    MySQL体系结构
    mysql-trigger-触发器
  • 原文地址:https://www.cnblogs.com/marsggbo/p/6622896.html
Copyright © 2020-2023  润新知