Redis 与 MongoDB 常用命令

Redis 常用命令

doc 环境下使用命令:

keys 命令
    ?    匹配一个字符
    *    匹配任意个(包括0个)字符
    []    匹配括号间的任一个字符,可以使用 "-" 符号表示一个范围,如 a[b-d] 可以匹配 "ab","ac","ad"
    \x    匹配字符x,用于转义符号,如果要匹配 "?" 就需要使用 \?

判断一个键值是否存在
    exists key
    如果存在,返回整数类型 1 ,否则返回 0

删除键
    del key [key.....]
    可以删除一个或多个键,返回值是删除的键的个数
    注意:不支持通配符删除

获得键值的数据类型
    type key
    返回值可能是 string(字符串类型) hash(散列类型) list(列表类型) set(集合类型) zset(有序集合类型)


赋值与取值
    set key value       赋值
    get key                取值

递增数字
    incr key
    当存储的字符串是整数形式时,redis提供了一个使用的命令 incr 作用是让当前的键值递增,并返回递增后的值
    incr num
    当要操作的键不存在时会默认键值为 0  ,所以第一次递增后的结果是 1 ,当键值不是整数时 redis会提示错误

增加指定的整数
    incrby key increment
    incrby 命令与 incr 命令基本一样,只不过前者可以通过 increment 参数指定一次增加的数值如:
        incrby num 2
        incrby num 3

减少指定的整数
    decr key
    decrby key increment
    desc 命令与incr 命令用法相同,只不过是让键值递减
    decrby 命令与 incrby命令用法相同

增加指定浮点数
    incrbyfloat key increment
    incrbyfloat 命令类似 incrby 命令,差别是前者可以递增一个双精度浮点数,如:
    incrbyfloat num 2.7
    注意: ( 受reids 版本限制,版本需要大于 2.6 版本) 

向尾部追加值
    append key value
    作用是向键值的末尾追加 value ,如果键不存在则将改键的值设置为 value,即相当于 set key value。返回值是追加后字符串的长度
    如:append foo " hello word!"

获取字符串长度
    strlen key
    返回键值的长度,如果键不存在则返回0

同时 获得/设置 多个键值
    mget key [key.....]
    mset key value [key value .......]

位操作
    getbit key offset
    setbit key offset value
    bitcount key [strart] [end]
    bitop operation destkey key [key .....]
    一个字节由8个二进制位组成,redis 提供了4个命令直接对二进制位进行操作
    getbit 命令可以获得一个字符串类型键指定位置的二进制位的值(0 或 1),索引从 0 开始,如果需要获取的二进制位的索引超出了键值
        的二进制位的实际长度则默认位值是 0
    setbit 命令可以设置字符串类型键指定位置的二进制位的值,返回值是该位置的旧值,如果需要设置的位置超过了键值的二进制位的长
        度,setbit 命令会自动将中间的二进制位设置为0,同理设置一个不存在的键的指定二进制位的值会自动将其前面的位赋值为 0
    bitcount 命令可以获得字符串类型键中值是1的二进制位个数,可以通过参数来限制统计的字节范围,如我们希望统计前两个字节(即 
        "aa")  命令:bitcount foo 0 1    注意: ( 受reids 版本限制,版本需要大于 2.6 版本) 
    bittop 命令可以对多个字符串类型键进行位运算,并将结果存储在destkey参数指定的键中。该命令支持的运算操作有 AND、 OR、  
        XOR、 NOT,
        如我们对bar 和 aar 进行 OR 运算操作: 
        set foo1 bar
        set foo2 aar
        bitop OR res foo1 foo2
        get res
        注: ( 受reids 版本限制,版本需要大于 2.6 版本) 
    
    
散列类型
  
赋值与取值
    hset key field value
    hget key field
    hmset key field value [ field value ...... ]
    hmget key field [ field ...... ]
    hgetall key
    hset 命令用来给字段赋值,而hget命令用来获得字段的值
    hset 命令的方便之处在于不区分插入和更新操作,这意味着修改数据时不用事先判断字段是否存在来决定要执行的是插入操作还是更新操
        作,当执行的是插入操作时, hset 命令返回 1 ,当执行的是更新操作时,hset 命令返回的是 0 ,当键本身不存在时, hset 命令还会
        自动建立他
    hmset 设置多个键值
    hmget 获得多个键值
    hgetall 获取键中所有字段和字段值却不知道键中有哪些字段时使用,返回的结果是字段和字段值组成的列表

判断字段是否存在
    hexists key field
    存在返回 1 ,否则返回 0

当字段不存在时赋值
    hsetnx key field value
    hsetnx 命令与hset 命令类似,区别在于如果字段已经存在,hsetnx 命令将不执行任何操作
    
增加数字
    hincrby key field increment
    使字段值增加指定的整数

删除字段
    hdel key field [ field .....]
    删除一个或多个字段,返回值是被删除的字段个数

只获取字段名或字段值
    hkeys key
    hvals key
    hkeys 获取所有字段的名字
    hvals 获得键中所有字段的值

获得字段数量
    hlen key

列表类型

向列表两端增加元素
    lpush key value [ value ....... ]
    rpush key value [ value ....... ]
    lpush 命令用来向列表左边增加元素,返回表示增加元素后列表的长度 
    rpush 命令用来向列表右边增加元素,返回表示增加元素后列表的长度 
    
从列表两端弹出元素
    lpop key
    rpop key
    lpop 命令可以从列表左边弹出一个元素,lpop 命令执行两步操作,1:将列表左边的元素从列表中移除,2:返回被移除元素值
    rpop 命令可以从列表右边弹出一个元素

获取列表中元素个数
    llen key
    当键不存在时,llen 返回 0

获得列表片段
    lrange key start stop
    获得列表中的某一片段,返回索引从 start 到 stop 之间的所有元素(包括两端的元素) 索引开始为 0
    注:lrange 与很多语言中用来截取数组片段的方法有一点区别是 lrange 返回的值包含最右边的元素
           lrange 命令也支持负索引,表是从右边开始计算序数,如 ' -1 ' 表示最右边第一个元素, ' -2 ' 表示最右边第二个元素,一次类推

删除列表中指定的值
    lrem key count value
    lrem 命令会删除列表中前 count 个值为 value 的元素,返回值是实际删除的元素个数。根据count 值的不同,lrem 命令执行的方式会
        略有差异
        当 count > 0 时,lrem 命令会从列表左边开始删除前 count 个值为 value 的元素
        当 count < 0 时,lrem 命令会从列表右边开始删除前count 个值为 value 的元素
        当 count = 0 时,lrem 命令会删除所有值为value的元素

获得 / 设置 指定索引的元素值
    lindex key index
    lset key index value
    lindex 命令用来返回指定索引的元素,索引从 0 开始 ,如果 index 是负数则表示从右边开始计算的索引,最右边元素的索引是 -1 
    lset 是通过索引操作列表的命令,它会将索引为 index 的元素赋值为 value 

只保留列表指定片段
    ltrim key start end
    ltrim 命令可以删除指定索引范围之外的所有元素,其指定列表范围的方法和 lrange 命令相同
    ltrim 命令常和 lpush 命令一起使用来限制列表中元素的数量,比如记录日志时我们希望只保留最近的 100 条日志,则每次加入新元素时
        调用一次ltrim 命令即可;

向列表中插入元素
    linsert key before | after pivot value
    linsert 命令首先会在列表中从左到右查找值为 pivot 的元素,然后根据第二个参数是 before 还是 after 来决定将 value 插入到该元素的
        前面还是后面,如果命令执行成功,返回插入操作完成之后列表的长度。如果没有找到 pivot 返回 -1 如果key 不存在或为空,返回 0
        
将元素从一个列表转到另一个列表R
    rpoplpush source destination
    rpoplpush 先执行 rpop 命令在执行 lpush 命令。rpoplpush 命令先会从source 列表类型键的右边弹出一个元素,然后将其加入到 destination 列表类型键的左边,并返回这个元素的值,整个过程是原子的

集合类型
增加删除命令
sadd key member [ member … ]
srem key member [ member … ]
sadd 命令用来向集合中增加一个或多个元素,如果键不存在则会自动创建。因为在一个集合中不能有相同的元素,所以如果要加入的元
素已经存在与集合中就会忽略这个元素。返回值是成功加入的元素数量(忽略的元素不计算在内)
srem 命令用来从集合中删除一个或多个元素,并返回删除成功的个数

获得集合中的所有元素
    smembers key
    返回集合中的所有元素

判断元素是否在集合中
    sismember key member
    判断一个元素是否在集合中是一个时间复杂度为 0(1) 的操作,无论集合中有多少个元素, sismember 命令始终可以极快的返回结果。当
        值存在时 sismember 命令返回 1 ,当值不存在或者键不存在时返回 0

集合间运算
    sdiff key [ key ...... ]
    sdiff 命令用来对多个集合执行差集运算。集合 A 与集合 B 的差集表示为 A- B ,代表所有属于 A 且不属于 B 的元素构成的集合,即 
        A - B = { x| x∈A  且 x ∈/B }
        
    命令使用方法:
           sadd seta 1 2 3 4 6 7 8
            sadd setb 2 3 4
            sdiff seta setb
    该命令支持同时传入多个键, 计算顺序是先计算 seta 和 setb 在计算结果与 setc 的差集
            sadd setc 2 3 4
            sdiff seta setb setc
    
    sinter key [ key ..... ]
    该命令用来对多个集合执行交集运算。集合 A 与集合 B 的交集表示为 A∩B,代表所有属于 A 且属于 B 的元素构成的集合
        即 A∩B = { x| x∈A  且 x ∈B }
        
        命令使用方法:
            sinter seta setb
            该命令同样支持同时传入多个键

    sunion key [ key ...... ]
    该命令用来对多个集合执行并集运算。集合 A 与集合 B的并集表示为 A∪B ,代表所有属于A或所有属于B的元素构成的集合
        即  A∪B = { x| x∈A  或 x ∈B }
        
        命令使用方法:
            sunion seta setb
            该命令同样支持同时传入多个键

    获得集合中元素的个数
        scard key
        
    进行集合运算并将结果存储
        sdiffstore destination key [ key ...... ]
        sinterstore destination key [ key ...... ]
        sunionstore destination key [ key ...... ]
        sdiffstore 命令和 sdiff 命令功能一样,唯一的区别就是前者不会直接返回运算的结果,而是将结果存在 destination 键中
        sinterstore 这个命令类似于 sinter 命令,但它将结果保存到 destination 集合,而不是简单地返回结果集。
        sunionstore 这个命令类似于 sunion 命令,但它将结果保存到 destination 集合,而不是简单地返回结果集。

    随机获得集合中的元素
        srandmember key [ count ]
        该命令用来随机从集合中获取一个元素
        还可以传递 count 参数来一次随机获得多个元素,根据 count 的正负不同,具体表现也不同
            当count 为正数时,srandmember 会随机获取从集合里获得 count 个不重复的元素。如果 count 的值大于集合中的元素个数,则 
                srandmember 会返回集合中的全部元素
            当 count 为负数时,srandmember 会随机从集合中获得 |count| 个的元素,这些元素有可能相同
        注:当传递count 参数时,在windows环境下提示命令参数错误

    从集合中弹出一个元素
        spop key
        由于集合类型的元素是无序的,所以 spop 命令会从集合中随机选择一个元素弹出,返回值为被移除的随机元素,如果 key 不存在或者 
            key 为空集时,返回 nil

有序集合类型(sorted set)
增加元素
zadd key score member [ score member … ]
zadd 命令用来向有序集合中加入一个元素和该元素的分数,如果该元素已经存在,则会用新的分数替换原有的分数。zadd命令的返回
值是新加入到集合中的元素个数(不包含之前已经存在的元素)

    获得元素的分数
        zscore key member
        
    获得排名在某个范围的元素列表
        zrange key start stop [ withscores ]
        zrevrange key start stop [ withscores ]
        zrange 命令会按照元素分数从小到大的顺序返回索引从 start 到 stop 之间的所有元素(包含两端的元素)。zrange 命令和 lrange 命
            令十分相似,如索引都是从0开始,负数代表从后向前查找(-1 表示最后一个元素)。如果需要同时获得元素的分数的话,可以在 
             zrange 命令的尾部加上 widthscores 参数
        注:如果两个元素的分数相同,redis会按照字典顺序(即 0<9<A<Z<a<z 这样的顺序)来进行排列。如果元素的值是中文,则取决于
               中文的编码方式,如图:
                
        zrevrange 命令和 zrange 的唯一不同在于 zrevrange 是按照元素分数从大到小的顺序给定结果的
       
    获得指定分数范围内的元素
        zrangebyscore key min max [ withscores ] [ limit offset count ]
        该命令按照元素分数从小到大的顺序返回分数在 min 到 max 之间(包含 min 和max 的元素)
        如果希望分数范围不包含端点值,可以在分数前加上 "(" 符号,例如:希望返回80分到100分的的数据,可以包含80分单不包含100分
            命令:zrangebyscore scoreboard 80 (100 widthscores
            
            min 和 max 还支持无穷大,同 zadd 命令一样,-inf 和 +inf 分别表示负无穷大和正无穷大。比如希望得到所有分数高于 80分(不
            包含80分)的人的名单,但是却不知道最高分是多少,这是就可以使用 +inf
            zrangebyscore scoreboard (80 +inf
            
            命令 limit offset count 与 SQL 中的用法基本相同,即在获得的元素列表的基础上向后偏移 offset 个元素并且只获取前count个元
            素
            
            
            zrevrangebyscore 不仅是按照元素分数从大往小的顺序给出结果,而且他的 min 和max 的参数的顺序和 zrangebyscore 命令是相
            反的
            

    增加某个元素的分数
        zincrby key increment member
        zincrby 命令可以增加一个元素的分数,返回值是更改后的分数,例如想给peter 加 4 分
           zincrby scoreborder 4 peter
           increment  也可以是负数表示减分
             zincrby scoreborder -4 peter
        如果指定元素不存在,redis 在执行命令前会先建立它并将他的值赋为0在执行操作        

    获得集合中元素的数量
        zcard key
    获得指定分数范围内的元素个数
        zcount key min max
        zcount 命令的 min max 参数的特性与 zrangebyscore 命令中的一样
        

    删除一个或多个元素
        zrem key member [ member .... ]
        zrem 命令的返回值是成功删除的元素数量(不包含本来就不存在的元素)

    按照排名范围删除元素
        zremrangebyrank key start stop
        按照元素分数从小到大的顺序(即索引 0 表示最小的值)删除在指定排名范围内的所有元素,并返回删除元素的数量
        

    按照分数范围删除元素
        zremrangebyscore key min max
        zremrangebyscore 命令删除指定分数范围内的所有元素,参数 min 和 max 的特性和 zrangebyscore 命令中的一样,返回值是删除
            元素的个数
        

    获得元素的排名
        zrank key member
        zrevrank key member
        zrank 命令会按照元素分数从小到大的顺序获得指定的元素排名(从 0 开始,即分数最小的元素排名为0)
        
        zrebrank 命令则正好相反,分数最大的元素排名为0

    计算有序集合的交集
        zinterstore destination numkeys key [ key ... ] [ weights weight [ weight ... ] ] [ aggregate SUM | MIN | MAX ]
        zinterstore 命令用来计算多个有序集合的交集病将结果存储在 destination 键中(同样以有序集合类型存储),返回值为 destination 
            键中元素的个数,destination 键中元素的分数是由 aggregate 参数决定的
        1. 当 aggregate 是 SUM (也就是默认值),destination 键中元素的分数是每个参与计算的集合中该元素分数的和
            
        2.当 aggregate 是 MIN 时,destination 键中元素的分数是参与计算的集合中该元素分数最小值
            
        3.当 aggregate 是 MAX 是,destination 键中元素的分数是参与计算的集合中该元素分数最大值
     
      zinterstore 命令还能通过 weights 参数设置每个集合的权重,每个集合在参与计算时元素的分数会被乘上该集合的权重
        如:
            

    计算集合间的并集
        zunionstore 
        用法与 zinterstore 命令的用法一样

事务
事务的原理是先将属于一个事务的命令发送给redis ,然后再让 redis 依次执行这些命令

    错误处理
    (1)语法错误。语法错误指命令不存在或者命令参数个数不对。这种情况下,事务中只要有一个命令有语法错误,执行exec命令后redis
            就会直接返回错误,连语法正确的命令也不会执行
            注:redis 2.6.5 之前的版本会忽略有语法错误的命令,然后执行事务中其他语法正确的命令。
    (2)运行错误。运行错误指在命令执行时出现的错误,比如使用散列类型的命令操作集合类型的键,这种错误在实际执行之前redis是无
            法发现的,所以在事务里这样的命令是会被redis接受并执行的,如果事务里的一条命令出现运行错误,事务里其他的命令依然会继
            续执行(包含出错命令之后的命令)

    reids的事务没有关系数据库事务提供的回滚功能,为此开发者必须在事务执行出错之后自己收拾剩下的摊子
    
watch 命令
    watch key [ key ... ]
    监视一个或多个 key ,如果在事务执行之前这个或这些 key 被其他命令所改动,那么事务将被打断,监控一直持续到exec命令
    

unwatch
    取消 watch 命令对所有 key 的监视


生存时间
    expire
    expire 命令的使用方法为 expire key seconds ,其中 seconds 参数表示键的生存时间,单位是秒,该参数必须是整数
    
    命令返回 1表示设置成功,返回 0 则表示键不存在或设置失败

    如果想知道一个键还有多久会被删除,可以使用 ttl 命令。返回值是键的剩余时间(单位是秒),
    
    如果想取消键的生存时间设置(即将键恢复成为永久的),可以使用 persist 命令。如果生存时间被成功清除则返回 1 。否则返回 0
    
    
    除了 persist 命令之外,使用 set 、getset 命令为键赋值也同时会清楚键的生存时间
    注: incr 、lpush、hset、zrem 命令均不会影像键的生存时间

    精确控制键的生存时间应该使用 pexpire 命令。该命令的单位是毫秒
    可以使用 pttl 命令以毫秒为单位返回键的剩余时间
    另外不太常用命令:expireat 和 pexpireat,该命令第二个参数表示键的生存时间的截至时间,expireat 单位秒 pexpireat 单位毫秒

sort 
    该命令可以对列表类型,集合类型,和有序集合类型键进行排序
    列表类型:
    
    
    有序集合类型排序时,会忽略元素的分数,只针对元素的自身的值进行排序
    
    
    除了可以排列数字外,sort 命令还可以通过 alpha 参数实现按照字典顺序排列非数字元素
    

    sort 命令的 desc 参数可以实现将元素按照从大到小的顺序排列
    sort 命令还支持 limit 参数来返回指定范围的结果,用法和sql 语句一样 limit offset count ,表示跳过前 offset 个元素并获取之后的
        count 个元素
    

    sort 命令 by 参数,默认情况下, sort uid 直接按照 uid 中的值排序,通过 by 参数,可以让 uid 按照其他键的元素来排序
    
    user_level_* 是一个占位符,他先取出 uid 中的值,然后在用这个值来查找相应的键
        比如在对 uid 列表进行排序时, 程序就会先取出 uid 的值 1 、 2 、 3 、 4 , 然后使用 user_level_1 、 user_level_2 、 user_level_3 
        和   user_level_4 的值作为排序 uid 的权重。

    使用 get 选项,可以根据排序的结果来取出相应的键值
    
    
    一个sort 命令中可以有多个 get 参数(而 by 参数只能有一个)
    

    默认情况下 sort 命令会直接返回排序结果,如果希望保存排序结果,可以使用 store 参数,保存后键的类型为列表类型

MongoDB常用命令

成功启动MongoDB后,再打开一个命令行窗口输入mongo,就可以进行数据库的一些操作。

输入help可以看到基本操作命令:

show dbs:显示数据库列表 show collections:显示当前数据库中的集合(类似关系数据库中的表) show users:显示用户

use :切换当前数据库,这和MS-SQL里面的意思一样 db.help():显示数据库操作命令,里面有很多的命令 db.foo.help():显示集合操作命令,同样有很多的命令,foo指的是当前数据库下,一个叫foo的集合,并非真正意义上的命令 db.foo.find():对于当前数据库中的foo集合进行数据查找(由于没有条件,会列出所有数据) db.foo.find( { a : 1 } ):对于当前数据库中的foo集合进行查找,条件是数据中有一个属性叫a,且a的值为1

MongoDB没有创建数据库的命令,但有类似的命令。

如:如果你想创建一个“myTest”的数据库,先运行use myTest命令,之后就做一些操作(如:db.createCollection(‘user’)),这样就可以创建一个名叫“myTest”的数据库。

数据库常用命令

1、Help查看命令提示

help

db.help();

db.yourColl.help();

db.youColl.find().help();

rs.help();

2、切换/创建数据库

use yourDB; 当创建一个集合(table)的时候会自动创建当前数据库

3、查询所有数据库

show dbs;

4、删除当前使用数据库

db.dropDatabase();

5、从指定主机上克隆数据库

db.cloneDatabase(“127.0.0.1”); 将指定机器上的数据库的数据克隆到当前数据库

6、从指定的机器上复制指定数据库数据到某个数据库

db.copyDatabase(“mydb”, “temp”, “127.0.0.1”);将本机的mydb的数据复制到temp数据库中

7、修复当前数据库

db.repairDatabase();

8、查看当前使用的数据库

db.getName();

db; db和getName方法是一样的效果,都可以查询当前使用的数据库

9、显示当前db状态

db.stats();

10、当前db版本

db.version();

11、查看当前db的链接机器地址

db.getMongo();

Collection聚集集合

1、创建一个聚集集合(table)

db.createCollection(“collName”, {size: 20, capped: 5, max: 100});

2、得到指定名称的聚集集合(table)

db.getCollection(“account”);

3、得到当前db的所有聚集集合

db.getCollectionNames();

4、显示当前db所有聚集索引的状态

db.printCollectionStats();

用户相关

1、添加一个用户

db.addUser(“name”);

db.addUser(“userName”, “pwd123”, true); 添加用户、设置密码、是否只读

2、数据库认证、安全模式

db.auth(“userName”, “123123”);

3、显示当前所有用户

show users;

4、删除用户

db.removeUser(“userName”);

其他
1、查询之前的错误信息
db.getPrevError();
2、清除错误记录
db.resetError();

查看聚集集合基本信息
1、查看帮助 db.yourColl.help();
2、查询当前集合的数据条数 db.yourColl.count();
3、查看数据空间大小 db.userInfo.dataSize();
4、得到当前聚集集合所在的db db.userInfo.getDB();
5、得到当前聚集的状态 db.userInfo.stats();
6、得到聚集集合总大小 db.userInfo.totalSize();
7、聚集集合储存空间大小 db.userInfo.storageSize();
8、Shard版本信息 db.userInfo.getShardVersion()
9、聚集集合重命名 db.userInfo.renameCollection(“users”); 将userInfo重命名为users
10、删除当前聚集集合 db.userInfo.drop();
聚集集合查询

1、查询所有记录
db.userInfo.find();
相当于:select* from userInfo;
默认每页显示20条记录,当显示不下的情况下,可以用it迭代命令查询下一页数据。注意:键入it命令不能带“;”
但是你可以设置每页显示数据的大小,用DBQuery.shellBatchSize= 50;这样每页就显示50条记录了。

2、查询去掉后的当前聚集集合中的某列的重复数据
db.userInfo.distinct(“name”);
会过滤掉name中的相同数据
相当于:select distict name from userInfo;

3、查询age = 22的记录
db.userInfo.find({“age”: 22});
相当于: select * from userInfo where age = 22;

4、查询age > 22的记录
db.userInfo.find({age: {$gt: 22}});
相当于:select * from userInfo where age >22;

5、查询age < 22的记录
db.userInfo.find({age: {$lt: 22}});
相当于:select * from userInfo where age <22;

6、查询age >= 25的记录
db.userInfo.find({age: {$gte: 25}});
相当于:select * from userInfo where age >= 25;

7、查询age <= 25的记录
db.userInfo.find({age: {$lte: 25}});

8、查询age >= 23 并且 age <= 26
db.userInfo.find({age: {$gte: 23, $lte: 26}});

9、查询name中包含 mongo的数据
db.userInfo.find({name: /mongo/});
//相当于%%
select * from userInfo where name like ‘%mongo%’;

10、查询name中以mongo开头的
db.userInfo.find({name: /^mongo/});
select * from userInfo where name like ‘mongo%’;

11、查询指定列name、age数据
db.userInfo.find({}, {name: 1, age: 1});
相当于:select name, age from userInfo;
当然name也可以用true或false,当用ture的情况下河name:1效果一样,如果用false就是排除name,显示name以外的列信息。

12、查询指定列name、age数据, age > 25
db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1});
相当于:select name, age from userInfo where age >25;

13、按照年龄排序
升序:db.userInfo.find().sort({age: 1});
降序:db.userInfo.find().sort({age: -1});

14、查询name = zhangsan, age = 22的数据
db.userInfo.find({name: ‘zhangsan’, age: 22});
相当于:select * from userInfo where name = ‘zhangsan’ and age = ‘22’;

15、查询前5条数据
db.userInfo.find().limit(5);
相当于:selecttop 5 * from userInfo;

16、查询10条以后的数据
db.userInfo.find().skip(10);
相当于:select * from userInfo where id not in (
selecttop 10 * from userInfo
);

17、查询在5-10之间的数据
db.userInfo.find().limit(10).skip(5);
可用于分页,limit是pageSize,skip是第几页*pageSize

18、or与 查询
db.userInfo.find({$or: [{age: 22}, {age: 25}]});
相当于:select * from userInfo where age = 22 or age = 25;

19、查询第一条数据
db.userInfo.findOne();
相当于:selecttop 1 * from userInfo;
db.userInfo.find().limit(1);

20、查询某个结果集的记录条数
db.userInfo.find({age: {$gte: 25}}).count();
相当于:select count(*) from userInfo where age >= 20;

21、按照某列进行排序
db.userInfo.find({sex: {$exists: true}}).count();
相当于:select count(sex) from userInfo;
索引

1、创建索引
db.userInfo.ensureIndex({name: 1});
db.userInfo.ensureIndex({name: 1, ts: -1});

2、查询当前聚集集合所有索引
db.userInfo.getIndexes();

3、查看总索引记录大小
db.userInfo.totalIndexSize();

4、读取当前集合的所有index信息
db.users.reIndex();

5、删除指定索引
db.users.dropIndex(“name_1”);

6、删除所有索引索引
db.users.dropIndexes();
修改、添加、删除集合数据

1、添加
db.users.save({name: ‘zhangsan’, age: 25, sex: true});
添加的数据的数据列,没有固定,根据添加的数据为准

2、修改
db.users.update({age: 25}, {$set: {name: ‘changeName’}}, false, true);
相当于:update users set name = ‘changeName’ where age = 25;

db.users.update({name: ‘Lisi’}, {$inc: {age: 50}}, false, true);
相当于:update users set age = age + 50 where name = ‘Lisi’;

db.users.update({name: ‘Lisi’}, {$inc: {age: 50}, $set: {name: ‘hoho’}}, false, true);
相当于:update users set age = age + 50, name = ‘hoho’ where name = ‘Lisi’;

3、删除
db.users.remove({age: 132});

4、查询修改删除
db.users.findAndModify({
query: {age: {KaTeX parse error: Expected 'EOF', got '}' at position 8: gte: 25}̲}, sort: {…set: {name: ‘a2’}, $inc: {age: 2}},
remove: true
});

db.runCommand({ findandmodify : “users”,
query: {age: {KaTeX parse error: Expected 'EOF', got '}' at position 8: gte: 25}̲}, sort: {…set: {name: ‘a2’}, $inc: {age: 2}},
remove: true
});
update 或 remove 其中一个是必须的参数; 其他参数可选。

参数

详解

默认值

query

查询过滤条件

{}

sort

如果多个文档符合查询过滤条件,将以该参数指定的排列方式选择出排在首位的对象,该对象将被操作

{}

remove

若为true,被选中对象将在返回前被删除

N/A

update

一个 修改器对象

N/A

new

若为true,将返回修改后的对象而不是原始对象。在删除操作中,该参数被忽略。

false

fields

参见Retrieving a Subset of Fields (1.5.0+)

All fields

upsert

创建新对象若查询结果为空。 示例 (1.5.4+)

false

语句块操作

1、简单Hello World
print(“Hello World!”);
这种写法调用了print函数,和直接写入"Hello World!"的效果是一样的;

2、将一个对象转换成json
tojson(new Object());
tojson(new Object(‘a’));

3、循环添加数据

for (var i = 0; i < 30; i++) {
… db.users.save({name: “u_” + i, age: 22 + i, sex: i % 2});
… };
这样就循环添加了30条数据,同样也可以省略括号的写法
for (var i = 0; i < 30; i++) db.users.save({name: “u_” + i, age: 22 + i, sex: i % 2});
也是可以的,当你用db.users.find()查询的时候,显示多条数据而无法一页显示的情况下,可以用it查看下一页的信息;

4、find 游标查询

var cursor = db.users.find();
while (cursor.hasNext()) {
printjson(cursor.next());
}
这样就查询所有的users信息,同样可以这样写
var cursor = db.users.find();
while (cursor.hasNext()) { printjson(cursor.next); }
同样可以省略{}号

5、forEach迭代循环
db.users.find().forEach(printjson);
forEach中必须传递一个函数来处理每条迭代的数据信息

6、将find游标当数组处理
var cursor = db.users.find();
cursor[4];
取得下标索引为4的那条数据
既然可以当做数组处理,那么就可以获得它的长度:cursor.length();或者cursor.count();
那样我们也可以用循环显示数据
for (var i = 0, len = c.length(); i < len; i++) printjson(c[i]);

7、将find游标转换成数组

var arr = db.users.find().toArray();
printjson(arr[2]);
用toArray方法将其转换为数组

8、定制我们自己的查询结果
只显示age <= 28的并且只显示age这列数据
db.users.find({age: {KaTeX parse error: Expected 'EOF', got '}' at position 8: lte: 28}̲}, {age: 1}).fo…lte: 28}}, {age: true}).forEach(printjson);
排除age的列
db.users.find({age: {$lte: 28}}, {age: false}).forEach(printjson);

9、forEach传递函数显示信息
db.things.find({x:4}).forEach(function(x) {print(tojson(x));});

以上转载自
https://www.cnblogs.com/kevinws/p/6281395.html
https://www.cnblogs.com/wpjzh/p/5999363.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值