• Mongodb基本命令总结


    Mongodb是近年来很火的一个非关系型数据库,不少企业都用来做部分业务模块数据的扩展存储,这里我

    总结了一些Mongodb的基本使用,作为分享,也方便自己以后需要的时候查询使用。

    数据库基本操作

    1. 创建数据库

    use  databaseName

    选择一个数据库,如果数据库不存在就自动创建一个数据库

    只有向数据库中插入数据时,数据库才会被真实创建出来,而当数据库中没有数据时,use不会马上创建数据库,

    这个特点有效减少了存储空间的占用。

    2. 查看数据库

    show dbs

    mongodb中默认有以下几个数据库:

    admin  存放用户和权限

    local   存放本地化数据(分布式部署)

    config  存储分片信息

    3. 删除数据库

     db.dropDatabase()  

    注意:mongodb中函数都用小驼峰命名

    4. 创建集合

    db.createCollection(collection_name)

    5. 查看集合

    show collections 或者 show tables

    注意集合的命名规则:

    1) 合法的utf-8字符串

    2) 不能有’’

    3) 不能以system开头,因为是系统的保留前缀

    4)不能和关键字重复

    6. 删除集合

    db.collection_name.drop()

    7. 集合重命名

    db.collection_name.renameCollection(‘new_name’)

    8. 获取集合对象

    db.getCollection(‘collection_name’)

    等价于db.collection

    集合中增加数据

    1. insert方法插入数据

    语法:

    db.collection_name.insert({数据内容})

     当向一个集合中插入数据的时候,如果这个集合不存在则自动创建

     最近插入的数据文档在数据库的最上方显示

     插入的数据域默认是字符串,如果在插入字段中不用双引号,数据库后台就会自动加上

    同时插入多条文档

    db.collection_name.insert([{ }, { }, { }])

    2. save方法插入文档

    db.collection_name.save()

    save与insert的区别

    如果加_id域,如果这个_id域的值已经存在,则会替换原有的文档,而insert是不允许插入相同

    的_id的

    集合中删除数据

    MongoDB删除数据的命令比较简单,也没有太多的变化

    语法:

    db.collection.remove(query ,justOne)

    参数:

    query与下文查询操作的query相同,justone表示只是删除匹配到的多条文档中的第一条文档

    集合查询操作

    1. 查询文档(重点)

    语法:

    db.collection_name.find(query,field)

    相当于 mysql中的 select * 

    query 筛选条件,相当于MySQL的where子句

    field  选择要展示的域

    返回值: 返回查找到的文档

    需要理解的点:

    query 和 field都是可选参数,不写参数就默认显示所有文档,也只有查找时不用传入query,一般其他操作都需要传入query进行筛选

    query  以键值对的形式给出查找条件

    field   以键值对的形式给出要展示或者不展示的 域为键,值时0时不显示该域, 值是1时显示该域,这是mongodb特有的特性

    例如:为了避免看到一大串的id值,在查找时_id 域经常会被设置为0

     db.class.find( {},{_id :0} )  除了_id 域,其他域都正常显示

    注意:

    1. 在写第二个参数时必须要写第一个参数

    2. 第二个参数只能同时限制多个域的0/1值,不能多个域都设置不同,否则其他没设置的域会混乱,_id域的设置除外(即无论_id域怎么设

    置都不影响其他域的设置)

    好了,重点中的重点来了

    query的使用

    因为键值对无法进行像MySQL中where子句那样强大的筛选作用(键值对筛选相当于MySQL中where子句筛选的等于条件),mongodb引入了操作符操作符的表达形式是以键值对形式出现的。下面介绍几种常用的操作符,更多的操作符可以查看Mongodb的官方文档。

    1)比较操作符

    $eq  等于操作符

    例如:db.class.find( {age: {$eq : 18} },{_id :0} )

    更多操作符:

        $gt   大于操作符 

        $lt   大于操作符

        $ lte  小于等于操作符

       $gte  大于等于操作符

       $ne   不等于操作符

     细节:mongodb中多种类型的数据都是可以比较的,例如数值类型,字符串类型

    2)范围操作符

    $ in [ ]   在范围集合内的文档被匹配 (连续的范围)

    例如:db.class.find( {age: {$in : [18, 23]} },{_id :0} )

    如果是用 $ and只能这样表达: $and:[{age:{$gt:.. } }, {age:{$lt:.. } } ]

    用gt和lt一起用来把范围括起来

     $ nin[ ]  不在范围集合内的文档被匹配

    3)逻辑操作符

    1. $ and: [ ]   和运算符

    query 中如果多个条件用逗号隔开,就为and关系(类似mysql中的where子句中的and)

    例如:db.class.find( {$and: [{age: {$ gt 17}, {age: {$ lt 22} ],{_id :0} )  查询年龄大于17,小于22的同学

    用$ and 可以改写为 db.class.find({$ and : [{ age: 17} ,{sex: ‘M’ } ] },{_id :0} )

    [ ]内一定要分成连个字典来表示两个条件,否则(只用一个字典来包含两个条件并用逗号分隔)在语法上就只表示一个条件,只不过这个条件里面包含两个条件而已

    一般平常使用多直接用逗号来分隔条件而不用 $and的操作符

    2 .$ or  或运算符

    语法表达上跟 $ and 一样,表达的是或逻辑筛选

    1. $not  取反运算符

    db.class.find( {age: {$not {$ gt 17} } },{_id :0} )  匹配年龄小于等于17的文档

    注意: $not 一般添加在条件值的前面,对值进行取反

    2. $ nor  既不也不运算符

    not(A or B) --> not A and not B

    db.class.find({$ nor : [{ age: 17} ,{sex: ‘M’ } ] },{_id :0} )

     注意:如果筛选匹配的文档的域是其他文档不具备的;即一个域有些文档有值,有些文档没值,这种筛选是无法匹配的

    2. 查询操作的另一条语法

    findOne(query,field)

    查找符合条件的第一条文档

    参数跟find一样

    集合的更新操作

    1. 修改文档内容操作

    语法:

    db.collection.update(query,update,upsert,multi)

    与mysql不同,mongodb所有修改操作都用update,包括对集合的域值的修改和集合结构的修改

    参数:query     筛选要修改的文档,相当于where

         update    将筛选的文档修改为什么内容,相当于set,需要配合修改操作符一起使用

         upsert     布尔值,默认为false,如果query文档不存在则不进行修改  ,如果为true,在文档不存在条件下,则根据query和update插入新文档

         multi       布尔值,默认为false如果query筛选的为多条,则只修改第一条,如果设置为true,则修改所有符合条件文档

     注意:

    upset 一般为用默认值false,因为如果原本没匹配的文档,很有可能是程序员自己输错了某些内容

    修改操作符:

    $ set

    如果没有该文档,需要插入的时候是根据查询条件和设置条件作为域来插入的

    如果需要修改的值为多个,就像插入数据一样,将不同域的值用一个{ }包起来,例如:

    db.class.update({name:'小张'},{$set:{age:16,sex:'m'}},true)

  • 相关阅读:
    [译文] 实体与值对象到底是不是一回事?
    实现 WebApi 自托管服务宿主于 WinForms 及其交互
    [译文] C# 8 已成旧闻, 向前, 抵达 C# 9!
    [译文] 为什么你在 C# 里总是应该使用 "var" 关键字
    通过设置iis在局域网中访问网页
    windows 10 安装使用kafka
    ASP.NET Core 2.1 中的 HttpClientFactory (Part 4) 整合Polly实现瞬时故障处理
    ASP.NET Core 2.1 中的 HttpClientFactory (Part 3) 使用Handler实现传出请求中间件
    ASP.NET Core 2.1 中的 HttpClientFactory (Part 2) 定义命名化和类型化的客户端
    Asp.net Core 2.0 OpenId Connect Handler缺失Claims?
  • 原文地址:https://www.cnblogs.com/thomson-fred/p/9764329.html
Copyright © 2020-2023  润新知