zoukankan      html  css  js  c++  java
  • MongoDB 基本操作

    使用 insert 完成插入操作

    操作格式

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

    示例

    • db.fruit.insertOne({name: "apple"})

    • db.fruit.insertMany([

      {name: "apple"},

      {name: "pear"},

      {name: "orange"},
      ])

    使用 find 查询文档

    关于 find :

    • find 是 MongoDB 中查询数据的基本指令,相当于 SQL 中的 SELECT。
    • find 返回的是游标。

    find 示例:

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

    查询条件对照表

    SQL MQL
    a = 1 {a:1}
    a <> 1 {a: {$ne: 1}}
    a > 1 {a: {$gt: 1}}
    a >= 1 {a: {$gte: 1}}
    a < 1 {a: {$lt: 1}}
    a <= 1 {a: {$lte: 1}}

    查询逻辑对照表

    SQL MQL
    a = 1 AND b = 1 {a: 1, b: 1} 或 {$and: [{a: 1},{b: 1}]}
    a = 1 or b = 1 {$or: [{a: 1}, {b: 1}]}
    a IS NULL {a: {$exists: false}}
    a In (1, 2, 3) {a: {$in: [1, 2, 3]}}

    查询逻辑操作符

    • $lt: 存在并小于
    • $lte: 存在并小于等于
    • $gt: 存在并大于
    • $gte: 存在并大于等于
    • $ne: 不存在或存在但不等于
    • $in: 存在并在指定数组中
    • $nin: 不存在或不在指定数组中
    • $or: 匹配两个或多个条件中的一个
    • $and: 匹配全部条件

    使用 find 搜索子文档

    find 支持使用 “field.sub_field” 的形式查询子文档。假设有一个文档:

    db.fruit.insertOne({
    	name: "apple",
    	from: {
    		country: "China",
    		province: "Guangdon"
    	}
    })
    

    考虑以下查询的意义:

    // 我要查询from子文档country
    db.fruit.find({"from.country": "China"})	
    
    // 我要查询from字段有一个country,country值为China
    db.fruit.find({"from": {country: "China"}})
    

    使用 find 搜索数组

    find 支持对数组中的元素进行搜索。假设有一个文档:

    db.fruit.insert([
    	{"name": "Apple", color: ["red", "green"]},
    	{"name": "Mango", color: ["yello", "green"]}
    ])
    

    考虑以下查询的意义:

    // 查询color数组中有没有值为red
    db.fruit.find({color: "red"})
    
    // 查询color数组中值为red或者为yellow
    db.fruit.find({$or: [{color: "red"}, {color: "yellow"}]})
    

    插入下列文档,在其中搜索

    db.movies.insertOne({
    	"title": "Raiders of the Lost Ark",
    	"filming_locations": [
    		{"city": "Los Angeles", "state": "CA", "country": "USA"},
    		{"city": "Rome", "state": "Lazio", "country": "Italy"},
    		{"city": "Florence", "state": "SC", "country": "USA"}
    	]
    })
    
    // 查找子文档城市是 Rome 的记录
    db.movies.find({"filming_locations.city": "Rome"})
    

    在数组中搜索子对象的多个字段时,如果使用 $elemMatch,它表示必须是同一个子对象满足多个条件。考虑以下两个查询:

    db.getCollection('movies').find({
    	"filming_locations.city": "Rome",
    	"filming_locations.country": "USA"
    })
    
    db.getCollection('movies').find([
    	"filming_locations": {
    		$elemMatch: {"city": "Rome", "country": "USA"}
    	}
    ])
    

    控制 find 返回的字段

    • find 可以指定只返回指定的字段;
    • _id字段可以明确指明不返回,否则默认返回;
    • 在 MongoDB 中我们称这为投影(projection);
    // 不返回_id 返回title
    db.movies.find({"category": "action"},{"_id":0, title:1}) 
    

    使用 remove 删除文档

    • remove 命令需要配合查询条件使用;
    • 匹配查询条件的文档会被删除;
    • 指定一个空文档条件会删除所有文档;

    以下示例:

    // 删除a等于1的记录
    db.testcol.remove({a: 1})
    
    //删除a小于5的记录
    db.testcol.remove({a: {$lt: 5}})
    
    // 删除所有记录
    db.testcol.remove({})
    
    // 报错
    db.testcol.remove()
    

    使用 update 更新文档

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

    举例:

    // 插入一条数据
    db.fruit.insertMany({
    	{name: "apple"},
    	{name: "pear"},
    	{name: "orange"}
    })
    // 查询name为apple的记录,将其form值修改为China
    db.fruit.updateOne({name: "apple"}, {$set: {from: "China"}})
    

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

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

    updateOne 或者 updateMany 方法要求更新条件部分必须具有以下之一,否则将报错:

    • (set/)unset
    • (push/)pushAll/$pop
    • (pull/)pullAll
    • $addToSet
    // 报错
    db.fruit.updateOne({name: "apple"}, {from: "China"})
    
    • $push:增加一个对象到数组底部
    • $pushAll:增加多个对象到数组底部
    • $pop:从数组底部删除一个对象
    • $pull:如果匹配指定的值,从数组中删除相应的对象
    • $pullAll:如果匹配任意的值,从数据中删除相应的对象
    • $addToSet:如果不存在则增加一个值到数组

    使用 dropDatabase 删除数据库

    切换到数据库,执行删除命令,最后通过 show dbs 命令查看数据库是否删除成功::

    > use test
    switched to db runoob
    > db.dropDatabase()
    { "dropped" : "test", "ok" : 1 }
    > show dbs
    admin   0.000GB
    config  0.000GB
    local   0.000GB
    

    使用 drop 删除集合

    • 使用db.<集合>.drop()来删除一个集合
    • 集合中的全部文档都会被删除
    • 集合相关的索引也会被删除
    • db.colToBeDropped.drop()
  • 相关阅读:
    Eclipse配置问题
    什么是SpringMvc
    【转载·】Linux yum 安装 gcc 、gcc-c++
    【转载】linux下安装wget命令(sftp实现法)
    [原创]关于javax.servlet.ServletException: File [&#47;loginController&#47;getVerifCode.jsp] not found异常 解决方案
    【转载】spring boot 链接 虚拟机(Linux) redis
    【转载】spring-boot 项目跳转到JSP页面
    [原创]Linux 下 redis 链接一次
    Linux 下安装 redis 详情
    [转载]CentOS 7虚拟机下设置固定IP详解
  • 原文地址:https://www.cnblogs.com/niuben/p/14880970.html
Copyright © 2011-2022 走看看