zoukankan      html  css  js  c++  java
  • mongo中的find/remove/update

    Find

    关于 find

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

    find 示例:

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

    基本查询条件对照表

    SQL Mongo
    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 Mongo
    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: "Guangdong"
      }
    })
    
    db.fruit.find( {"from.country" : "China"} )
    

    使用 find 搜索数组

    • find 支持对数组中的元素进行搜索。
    • 假设有一个文档
    db.fruit.insert({
    	{"name" : "Apple", color: ["red", "green"]},
    	{"name" : "Mongo", color: ["yellow", "green"]}
    })
    
    db.fruit.find({color: "red"})
    db.fruit.find({$or: [{color: "red"}, {color: "yellow"}]})
    

    使用 find 搜索数组中的对象

    • 假设有一个文档
    	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"})
    

    使用 find 搜索数组中的对象

    • 在数组中搜索子对象的多个字段时,使用 $elemMatch 表示必须是同一个子对象满足多个条件,如下(使用上一段例子中的文档作为数据)。
    	db.getCollection('movies').find({
    		"filming_locations" : {
    			$elemMatch : {"city" : "Rome", "country" : "USA"}
    		}
    	})
    

    控制 find 返回的字段

    • find 可以指定只返回指定的字段;

    • _id 字段比较特殊,必须明确指明不返回,否则默认返回;其余字段用1表示返回,0表示不返回。

    • 在 MongoDB 中我们称之为投影(projection)

      // 不返回ID, 返回title。
    	db.movies.find({"category" : "action"}, {"\_id":0, titile: 1})
    

    Remove

    使用 remove 删除文档

    • remove 命令需要配合查询条件使用;
    • 匹配查询条件的文档会被删除;
    • 指定一个空文档条件会删除所有文档;
    	db.testcol.remove({a : 1}) // 删除 a 等于 1 的记录
    	db.testcol.remove({a : {$lt : 5}}) // 删除 a 小于 5 的记录
    	db.testcol.remove({}) // 删除所有记录
    	db.testcol.remove() // 报错
    

    Update

    使用 update 更新文档

    • update 操作执行格式: db.<集合>.update(<查询条件>, <更新字段>)
    db.fruit.insertMany({
    {name: "apple"},
    {name: "pear"},
    {name: "orange"}
    })
    
    // 查询 name为apple 的记录,将找到的记录的 from设置为China。
    db.fruit.updateOne({name: "apple"}, {$set: {from: "China"}})
    
    • 更多 update

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

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

      3. updateOne/updateMany 方法要求更新条件部分必须具有以下条件之一,否则会报错:

        	/**
        * $push 增加一个对象到数组底部
        * $pushAll 增加多个对象到数组底部
        * $pop 从数组底部删除一个对象
        * $pull 如果匹配指定的值,从数组中删除相应的对象
        * $pullAll 如果匹配任意的值,从数据中删除相应的对象
        * $addToSet 如果不存在则增加一个值到数组
          */
          // 否则会报错
        db.fruit.updateOne({name: "apple"}, {from: "China"})
      
  • 相关阅读:
    Vue框架(三)——Vue项目搭建和项目目录介绍、组件、路由
    Vue框架(二)——Vue指令(v-once指令、v-cloak指令、条件指令、v-pre指令、循环指令)、todolist案例、Vue实例(计算、监听)、组件、组件数据交互
    Vue框架(一)——Vue导读、Vue实例(挂载点el、数据data、过滤器filters)、Vue指令(文本指令v-text、事件指令v-on、属性指令v-bind、表单指令v-model)
    异步调用与回调机制
    进程池与线程池
    多线程实现并发的套接字通信
    线程queue
    定时器
    Event事件
    信号量
  • 原文地址:https://www.cnblogs.com/sweetXiaoma/p/14581463.html
Copyright © 2011-2022 走看看