• mongodb 基本操作


    所有操作都在 MongoDB 可视化工具 Robo 3T 软件下演示操作

    一:使用 insert 插入文档:

    插入一条数据与多条数据的格式:

    1 db.<集合>.insertOne(<JSON对象>)
    2 db.<集合>.insertMany([<JSON 1>, <JSON 2>, ...<JSON n>])

    示例:

    1 db.fruit.insertOne({name: "apple"})
    2 
    3 db.fruit.insertMany([
    4         {name: "apple"},
    5         {name: "pear"},
    6         {name: "orange"}
    7     ])

    Robo 3T:

    单条:

     

    多条:

    二:使用 find 查询文档:

    查询条件对照表:

    运算符:

    1 $lt  :存在并小于; 
    2 $lte :存在并小于等于;
    3 $gt  :存在并大于;
    4 $gte :存在并大于等于;
    5 $ne  :不存在或存在但不等于;
    6 $in  :存在并在指定数组中;
    7 $nin :不存在或不在指定数组中;
    8 $or  :匹配两个或多个条件中的一个;
    9 $and :匹配全部条件;

    查询示例:

    1 db.movies.find("year": 1975})  //单条件查询;
    2 db.movies.find({"year": 1989, "title": "Batman"})  //多条件and查询;
    3 db.movies.find({$and: [{"title": "Batman"}, {"category": "action}]})  //and查询的另一种形式;
    4 db.movies.find({$or: [{"year": 1989}, {"title": "Batman"}]})  //多条件 or 查询;
    5 db.movies.find({"title": /^B/})  //按正则表达式查找;

    使用 find 查询子文档:

     1 # 插入带有子文档的文档数据;
     2 db.fruit.insertOne({
     3     name: "apple",
     4     from: {
     5         country: "China",
     6         province: "Guangdon"
     7     }
     8 })
     9 
    10 # 查询:
    11 db.fruit.find({"from.country": "China"})

    Robo 3T:(上方为插入文档的命令,下方显示的数据需使用 db.getCollection('fruit').find({}) 查询才会显示结果)

    查询数组中的元素(例1):

     1 # 插入带数组的文档数据
     2 
     3 db.fruit.insert([
     4     {"name": "Apple", color: ["red", "green"]},
     5     {"name": "Mango", color: ["yellow", "green"]}
     6 ])
     7 
     8 # 查询
     9 
    10 db.fruit.find({color: "red"})  //显示一个结果;
    11 db.fruit.find({$or: [{color: "red"}, {color: "yellow"}]})  //显示两条结果;

    Robo 3T:(插入的数组文档的显示格式)

    查询数组中的对象(例2):

     1 # 文档数组中的子文档
     2 
     3 db.movies.insertOne({
     4     "title": "Raiders of the Lost Ark",
     5     "filming_locations": [
     6         {"city": "Los Angeles", "state": "CA", "country": "USA"},
     7         {"city": "Rome", "state": "Lazio", "country": "Italy"},
     8         {"city": "Florence", "state": "SC", "country": "USA"}
     9     ]
    10 })   
    11 
    12 
    13 # 查询城市为 Rome 的记录
    14 
    15 db.movies.find({"filming_locations.city": "Rome"})

    Robo 3T的文档显示:

    查询在同一子对象中必须同时满足两个条件的文档,如下所示:

    1 # 第一种方法:
    2 
    3 db.getCollection('movices').find({
    4     "filming_locations.city": "Rome",
    5     "filming_locations.country": "USA"
    6 })

    第二种,使用 $elemMatch 查询,它表示必须是同一子对象满足多个条件。

    (子对象  city=Rome  ,它的  country=Italy 而不是等于 USA ,所以查询返回的文档为空)

    使用 find 返回指定字段

    _id 字段必须明确指定不返回(0),否则默认返回(1);

    1 # 不返回 _id,只返回 title;
    2 
    3 db.movies.find({}, {"_id": 0, title: 1})
    4 
    5 # {} 表示操作所有文档,可加条件,比如只找 category=action 的文档数据;
    6 db.movies.find({"category": "action"}, {"_id": 0, title: 1})

    三:使用 remove 删除文档:

    示例:

    1 db.testcol.remove({a: 1})  //删除 a 等于 1 的文档;
    2 db.testcol.remove({a: {$lt: 5}})  //删除 a 小于 5 的文档;
    3 db.testcol.remove({})  //删除所有文档;
    4 db.tesfcol.remove()  //错误写法,报错;

    四:使用 update 更新文档

    格式: db.<集合>.update(<查询条件>, <更新字段>) 

    updateOne:表示无论条件匹配多少条记录,始终只更新第一条;

    updateMany:表示条件匹配多少条就更新多少条;

    两个方法在要求更新的部分中,必须加入 以下操作符中的一个,才能进行更新操作。否则会报错:

    1 $set     :更新的字段不存在时新增字段,存在则修改它;
    2 $unset   :删除字段;
    3 $push    :增加一个对象到数组底部;
    4 $pushAll :增加多个对象到数组底部;
    5 $pop     :从数组底部删除一个对象;
    6 $pull    :如果匹配指定的值,从数组中删除相应的对象;
    7 $pullAll :如果匹配任意的值,从数据中删除相应的对象;
    8 $addToSet:如果不存在则增加一个值到数组;

    例子:

    1 # 插入多条数据;
    2 db.fruit.insertMany([
    3     {name: "apple"},
    4     {name: "pear"},
    5     {name: "orange"}
    6 ])
    7 
    8 # 根据查询条件更新文档数据;
    9 db.fruit.updateOne({name: "apple"}, {$set: {from: "China"}})

    Robo 3T:(通过找出  name=apple  的数据后,使用  $set  进行更新)

    五:使用 drop 删除集合

    格式: db.<集合>.drop() 

    该命令将会删除全部文档,以及删除集合相关的索引。

    慎用 ! 删除整个库: db.dropDatabase() ,在当前库下运行将删除整个库。

  • 相关阅读:
    Navicat工具链接 mysql"Access denied for user'root'@'IP'" 用户远程赋值
    centos 安装 swoole_framework 框架
    安装Ubuntu时出现Intel VT-X没有开启
    qt中控件的使用函数
    位操作
    快速排序
    二分查找法
    面试题第二弹
    串口助手输出乱码或无输出问题
    stm32串口烧写程序到开发板
  • 原文地址:https://www.cnblogs.com/liqiongming/p/13571630.html
Copyright © 2020-2023  润新知