mongo基础---增删改查

时间:2022-08-30 16:10:21

正文

MongoDB 是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系型数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似Json格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引----【来源百度百科】

一、Mongo的查询语句

公式:

db.collection.find({query filter},{projection})

解释:

  • query filter:查询的条件,类似于MySql中的where语句;可多选
  • projection:列出要查询的数据,可选值为1、0;其中1表示展示,0表示不展示;其中_id属性默认是展示;可多选
  • collection:表示要查询的集合(本文所有例子中默认为app集合)

例子:

  • 查询所有:db.app.find({})
  • 部分查询:db.app.find({_id:3})
  • 键的筛选:db.app.find({},{name:1,_id:0})

说明:

键的筛选是查询时只返回自己感兴趣的键值,通过指定projection来实现。可以节省传输的数据量,又能节省客户端解码文档的时间和内存消耗。

查询条件:

  • 比较查询:通过$lt,$lte,$gt,$gte,$ne来实现,分别对应<,<=,>,>=,!=;它们可以组合起来以查找一个范围内的值
  • 关联查询:通过$in,$nin,$or实现,分别对应在某一个集合中、不在某一个集合中(此处集合与collection集合不同,可以理解成一个键的多个值所组成的数学形式上的集合)以及或逻辑

例子:

  • 查询_id键在20与60之间:db.app.find({_id:{$gt:20,$lt:60}})
  • 查询_id键不为16的所有数据:db.app.find({_id:{$ne:16}})
  • 查询_id键在[1,3,6,7]中的数据:db.app.find({_id:{$in:[1,3,6,7]}})
  • 查询_id键为16或者name为讯飞输入法的数据:db.app.find({$or:[{_id:16},{name:"讯飞输入法"}]})

特殊类型的查询:

  • 查询null:db.app.find({name:{$in:[null]}});查询所有name为null的数据或者name不存在的数据
  • 正则查询:mongo不直接支持模糊查询,但是可以通过正则表达式去实现模糊查询,例如:查询所有app的name以讯飞开头的所有数据:db.app.find({name:/^讯飞/})
  • 内嵌查询:如某个键并不是一个基础的类型,而是一个嵌套的类型,则可以使用内嵌查询,来满足业务需求;例如name键中包含first与last两个子健,要查询所有name中first为讯飞的数据,可以:db.app.find({name.first:"讯飞"})
  • 数组查询:通过$all,$size,$slice实现;分别表示返回满足所有数组元素的数据、满足指定长度的数据以及数组的一个子集合
    • db.app.find({tagIds:{$all:[1,2]}}),只要某数据中tagIds键包含[1,2]数组,就返回
    • db.app.find({tagIds:{$size:3}}),只要某数据中tagIds键中有有三个值,就返回
    • db.app.find({tagIds:{$slice:[1,2]}}),返回偏移量为1,元素个数为2

$where查询:

暂时不会,看某些参考博客上说,这种查询方式不会利用到索引,查询效率较低,不宜使用

limit,skip和sort的使用

limit:限制结果数量,限制的是上限。
skip:略过匹配到的前n个文档,然后返回余下的文档。skip略过过多的文档时会产生性能问题,建议尽量避免。
sort:按照指定的键对文档进行排序,1为升序,-1为降序。

db.app.find({}).limit(20).sort({updatetime:-1})

游标

mongo查询结果其实一个游标,可以通过var cursor = db.app.find({})来获取,可以利用游标来获取结果,也可以达到limit、skip等效果

二、Mongo的update语句

公式:

db.collection.update({update filter},{update key-value},{upsert|multi|writeConcern})

解释:

  • update filter:update的查询条件,与find中query filter差不多
  • update key-value:要更新的update对象
  • upsert:如果不存在update的数据,是否插入新的数据,默认是false,不插入;可选参数
  • multi:默认false。只更新找到的第一条记录;true,更具条件更新全部数据
  • writeConcern:抛出异常级别---没用过

例子:

  • db.app.update({_id:3},{name:"讯飞输入法"});将id等与3的数据更新为{"_id":3,"name":"讯飞输入法"},也即该方法会删除那些没有在update key-value中的出现的键(由于mongo没有回滚机制,个人感觉这个语法很坑)
  • db.app.update({_id:3},{$set:{name:"讯飞输入法"}});将id等于3的数据中键name的值更新为讯飞输入法

针对于update key-value说明:

  • $set:用来指定一个键并更新键值,若键不存在并创建
  • $inc:对文档的某个值为数字型(只能为满足要求的数字)的键进行增减的操作
  • $unset:主要是用来删除键
  • $push:向文档的某个数组类型的键添加一个数组元素,不过滤重复的数据。添加时键存在,要求键值类型必须是数组;键不存在,则创建数组类型的键
  • $pop:从数组的头或者尾删除数组中的元素,从数组尾部删除:1,从数组头部删除:-1
  • ....

三、Mongo的remove语句

公式:

db.collection.remove({remove filter},{justOne|writeConcern})

解释:

  • remove filter:remove的查询条件,与find中的query filter差不多
  • justOne:为1表示删除一个元素
  • writeConcern:抛出异常级别

列子:

db.app.remove({name:"/^讯飞/"},{justOne:1})

四、Mongo的insert/save语句

公式:

  • db.collection.insert(document)
  • db.collection.save(document)

解释:

document表示要插入的文档

例子:

  • db.app.insert({name:"讯飞输入法",tagIds:[1,2,3,4]})
  • db.app.save({name:"讯飞输入法",tagIds:[1,2,3,4]})

区别:

当主键"_id"不存在时,都是添加一个新的文档,但主健"_id"存在时,就有些不同了;insert:当主键"_id"在集合中存在时,不做任何处理。save:当主键"_id"在集合中存在时,进行更新。

mongo基础---增删改查的更多相关文章

  1. Python进阶----数据库的基础&comma;关系型数据库与非关系型数据库&lpar;No SQL&colon;not only sql&rpar;&comma;mysql数据库语言基础&lpar;增删改查&comma;权限设定&rpar;

    day37 一丶Python进阶----数据库的基础,mysql数据库语言基础(增删改查,权限设定) 什么是数据库:    简称:DataBase ---->DB    数据库即存放数据的仓库, ...

  2. MongoDB 基础增删改查

    增删改查 基础操作 use show dbs show collections db[当前所在数据库] 插入文档 db.collection.insert() db.collection.insert ...

  3. MongoDB学习笔记&comma;基础&plus;增删改查&plus;索引&plus;聚合&period;&period;&period;

    一 基础了解 对应关系 -> https://docs.mongodb.com/manual/reference/sql-comparison/ database -> database ...

  4. Hibernate基础增删改查语法

    1.创建好Hibernate项目,创建好实体类和测试类,如果不会创建Hibernate项目的同学,点此处:http://www.cnblogs.com/zhaojinyan/p/9336174.htm ...

  5. Mysql数据库基础增删改查常用语句命令

    Mysql增删改查常用语句命令 一.增删改查语句总览 创建: create(创建数据库) 增:insert(插入表数据) 删:drop.delete(删除表.删除表数据) 改:update.alter ...

  6. mongo 语法 增删改查

    1.增 db.collection.insert()与db.collection.save() 都是增加,区别:save()遇到相同_id后,则更新此_id数据. 而insert()则报错 > ...

  7. mysql 基础 增删改查语句

    MySQL:众多关系型数据库中的一种仓库 --数据库箱子 --表数据库:进入mysql 命令行: mysql -uroot -p查看所有数据库: show databases;创建数据库: creat ...

  8. SQL基础增删改查

    一.基础语句介绍 SQL 可以分为两个部分:数据操作语言(DML)和数据定义语言(DDL) 1.数据操作语言(DML)基本指令: select       从数据表中获取数据(现阶阶段,二次开发常用) ...

  9. 关于oracle的基础增删改查操作总结

    ① 进入数据库: sqlplus“/as sysdba” 或者sqlplus / as sysdba 注:完整格式:  sqlplus“用户名/密码@数据库名as sysdba” 注:请注意,sqlp ...

随机推荐

  1. HTML基本元素(四)

    1.HTML框架 框架的作用就是把浏览器窗口划分成多个子窗口,而且每个子窗口都可以载入各自的HTML文档. *注意:html框架集与body同级,因此不能同时出现! 框架结构标签:<frames ...

  2. Coding4Fun Toolkit支持本地化解决办法

    在项目中需要使用Coding4Fun Toolkit中的TimePicker控件, 1. 但是在中文系统下显示的却是英文: 2. 最后发现,需要在源代码中添加中文资源,并重新编译出包含中文语言的dll ...

  3. MVC项目经验杂谈

    ASP.NET MVC 绝大多数的公司已经用上了ASP.NET MVC,博主手里也做了不少个MVC的项目,在这里分享一下我在项目中是如何使用MVC的 打造通用的异常处理 项目上线运行,并不是所有的时候 ...

  4. 【wikioi】1040 统计单词个数

    题目链接 算法:划分型DP PS:被卡过3天.日期:2013-10-10 ~ 2013-10-12 18:52:48 这题是我提交了13次AC= =汗= = 题目描述: 给出一个长度不超过200的由小 ...

  5. iOS学习笔记---oc语言第四天

    字符串 数组 一.使用苹果帮助文档 学会使⽤用苹果帮助⽂文档是开发者的⼀一项技能 Inherits from 继承⾃自 Conforms to 遵循什么协议 Framework 属于哪个框架 Avai ...

  6. valueOf intValue parsetInt区别

    1.int intValue() 以 int 类型返回该 Integer 的值. Long l = 123; l.intValue() ---->int : 123 2.static int p ...

  7. Mysql重要配置参数的整理2

    http://ssydxa219.iteye.com/category/209848 下面开始优化下my.conf文件(这里的优化只是在mysql本身的优化,之前安装的时候也要有优化) cat /et ...

  8. Lesson 2-3(字符串)

    2.5 字符串 --- 字符串是不可变的. >>> str = "Hello world!" >>> str[-6:-1] = "py ...

  9. L360 Most People Spend Their Time in Just 25 Places

    Some people are always out on the town, going to concerts, restaurant openings, you name it. They're ...

  10. iOS 横屏模态进入下一级界面&comma; 竖屏退出

    首先  Deployment Info 设置 除了  Upside Down 都勾选 然后,在AppDelegate.h 文件中 添加属性 @property(nonatomic,assign)NSI ...