zoukankan      html  css  js  c++  java
  • MongoD 语法

    MongoD 语法

    1.常用

    1 .查看有哪些库

    > show dbs;
    admin   0.000GB
    config  0.000GB
    local   0.000GB
    

    2 .当前库,只存在于内存中

    > db
    test
    

    3 .查看当前库有哪些表 tables 或集合collections

    > show tables;
    > show collections;
    

    4 .隐式创建表和插入数据(创建表c1 ,并向内部插入两条数据)

        - db.c1.insert({k1:"V1",k2:"V2"})
    > db.c1.insert({name:"jack",age:10})
    > db.c1.insert({address:"beijing"})
    

    5 .查看表中数据(查看当前库,c1表中 全部数据)

    > db.c1.find()
    { "_id" : ObjectId("5bdbfad85f97280919da4bb5"), "name" : "jack", "age" : 10 }
    { "_id" : ObjectId("5bdbfbe85f97280919da4bb6"), "address" : "beijing" }
    

    6 .创建库db1

    > use db1
    

    7 .向库中创建集合后,该库才会真正被创建

    > db.c2.insert({name:"user01"})
    

    8 .删除当前所在的库(db1)

    > db
    db1
    > db.dropDatabase()
    { "dropped" : "db1", "ok" : 1 }
    

    9 .帮助

    > db.c1.help()
    

    10 .显式创建集合无需插入数据

        - db.createCollection("集合名称")
    > db.createCollection("c2")
    { "ok" : 1 }
    > show tables;
    c1
    c2
    

    11 .删除指定的集合 c2

    > db.c2.drop()
    true
    

    2.增加

    1 .通过 JavaScript JS 语句向db2表中插入 100W数据

    > for(var i=0;i<1000000;i++){ db.c2.insert({name:"user"+i,age:i,addr:"addr"+i});}
    

    2 .隐式创建一个集合,直接插入数据

    db.c2.insert({name:"rose",age:20,addr:"beijing"})
    

    3 .显式创建集合无需插入数据

       - db.createCollection("集合名称")
    > db.createCollection("c2")
    { "ok" : 1 }
    

    4 .创建固定集合【可用于日志存储,指定大小,指定条数】

        - 指定集合大小,指定集合文档的数量;哪个值先达到按照哪个值限制。
        - db.createCollection("集合名称",{capped:true,size:大小kb,max:条数})
        
    > db.createCollection("c3",{capped:true,size:100,max:10})
    { "ok" : 1 }
    

    5 .修改集合大小,以及条数

    > db.runCommand({convertToCapped:"c3",size:1000,max:10})
    { "ok" : 1 }
    

    3.删除

    1 .删除一张表里的所有内容

    > db.c2.remove({})
    WriteResult({ "nRemoved" : 1000001 })
    

    2 .删除指定的数据 "name":"jack" 或 _id 或 ObjectId("5bdbfbe85f97280919da4bb6")

    > db.c1.remove({"name":"jack"})
    > db.c1.remove({"_id" : ObjectId("5bdbfbe85f97280919da4bb6")});
    

    3 .删除 [{name:"u01"}或者{age:8}]

    > db.c1.remove({$or:[{name:"u01"},{age:8}]})
    WriteResult({ "nRemoved" : 2 })
    

    4 .删除指定的集合 c2 (等同于删除一张表)

    > db.c2.drop()
    true
    

    5 .删除当前所在的库(db1)

    > db
    db1
    > db.dropDatabase()
    { "dropped" : "db1", "ok" : 1 }
    

    4.查询:

    4.1常用查询

    1 .查看c2集合中一共有多少条数据

    > db.c2.find().count()
    1000001
    

    2 .通过find() 查询时,默认展示20条数据 【通过 it 命令展示下 20条数据】

    > db.c2.find()
    { "_id" : ObjectId("5bdc0387b377cd238feceda5"), "name" : "rose", "age" : 20, "addr" : "beijing" }
    ... ...
    { "_id" : ObjectId("5bdc04d0b377cd238fecedb8"), "name" : "user18", "age" : 18, "addr" : "addr18" }
    Type "it" for more        
    

    3 .查询出集合中第一条数据 findOne

    > db.c1.findOne({})
    {
            "_id" : ObjectId("5bdc2282b3d6a80c63a9a4a5"),
            "name" : "user0",
            "age" : 0
    }
    

    4 .只查询集合中的指定字段

        - {}    第一个花括号 表示针对所有的数据
        - {name:1,_id:0}    第二个花括号,表示要显示的内容  【非0即为真,为0 时表示不显示 指定的字段 】
            name:1     表示显示  name 字段
            _id:0      表示不显示 _id  字段
                
    > db.c1.find({},{name:1,_id:0})
    { "name" : "user0" }
    ... ...
    { "name" : "user19" }
    Type "it" for more
    

    4.2条件表达式:

    语法:

    db.tables.find({},{})
        - {}    第一个花括号 放显示条件  空为所有值
            大于:key > value   {key:{$gt:value}}
            小于:key < value   {key:{$lt:value}}
            大于等于:key >= value   {key:{$gte:value}}
            小于登录:key <= value   {key:{$lte:value}}
            不等于:key != value   {key:{$ne:value}}
    

    1 .查询出年龄小于10岁的名字和年龄 不显示 _id

    > db.c1.find({age:{$lt:10}},{_id:0})
    { "name" : "user0", "age" : 0 }
    { "name" : "user1", "age" : 1 }
    { "name" : "user2", "age" : 2 }
    { "name" : "user3", "age" : 3 }
    { "name" : "user4", "age" : 4 }
    { "name" : "user5", "age" : 5 }
    { "name" : "user6", "age" : 6 }
    { "name" : "user7", "age" : 7 }
    { "name" : "user8", "age" : 8 }
    { "name" : "user9", "age" : 9 }
    

    4.3常用统计值:

    统计语法:

        统计(count)、排序(sort({}))、skip() 跳过多少行、limit() 显示多少行
        
        db.table.find({},{}).count()    # 统计条数
        db.c1.find().sort({age:-1})     # 根据 age 字段排序   1为正序  -1 为倒叙
        db.c1.find().skip(6).limit(5)   # skip(6)  跳过前 6 条数据,limit(5) 显示接下来的 5 条数据
    

    1 .查看age 不等于10的有多少条

        > db.c1.find({age:{$ne:10}},{}).count()
        99
    

    2 .当find()查询所有值,conut 默认统计所有,如果显示实际展示条数 count(1)

    > db.c1.find().skip(6).limit(5).count()
    100
    
    > db.c1.find().skip(6).limit(5).count(1)
    5
    

    3 .根据age 字段排序,-1 按照倒叙方式排列 sort内部使用的为 json 串sort.({age:-1})

    > db.c1.find().sort({age:-1})
    

    4 .查询 数据 6-10 条数据

    > db.c1.find().skip(6).limit(5)
    { "_id" : ObjectId("5bdc2282b3d6a80c63a9a4ab"), "name" : "user6", "age" : 6 }
    { "_id" : ObjectId("5bdc2282b3d6a80c63a9a4ac"), "name" : "user7", "age" : 7 }
    { "_id" : ObjectId("5bdc2282b3d6a80c63a9a4ad"), "name" : "user8", "age" : 8 }
    { "_id" : ObjectId("5bdc2282b3d6a80c63a9a4ae"), "name" : "user9", "age" : 9 }
    { "_id" : ObjectId("5bdc2282b3d6a80c63a9a4af"), "name" : "user10", "age" : 10 }
    

    4.4 $查询:find

    数组查询:$all $in $nin

    #语法:
        $all    查询数组中 精确包含 
        > db.c1.find({数组:{$all:[精确包含值一,精确包含值二,精确包含值三]}})
    

    1.向c1集合中插入三条数组 [1,3,5]

    > db.c1.insert({name:"zhangsan",age:18,hobby:["basketall","pingpong","football","volleyball"]})
    > db.c1.insert({name:"lisi",age:28,orders:[1,2,3,4,5]})
    > db.c1.insert({name:"lisi",age:28,orders:[1,2,3,4]})
    

    2.查询出 orders 数组中包含 [1,3,5] 的数据 和 hobby 数组中包含 ["basketall","football"] 的值

    > db.c1.find({orders:{$all:[1,3,5]}})
    { "_id" : ObjectId("5bdc3488b3d6a80c63a9a50c"), "name" : "lisi", "age" : 28, "orders" : [ 1, 2, 3, 4, 5 ] }
                    
    > db.c1.find({hobby:{$all:["basketall","football"]}})
    { "_id" : ObjectId("5bdc33f3b3d6a80c63a9a50b"), "name" : "zhangsan", "age" : 18, "hobby" : [ "basketall", "pingpong", "football", "volleyball" ] }
    

    数组查询: $in

    #语法:
        $in     匹配任意值即可
        > db.c1.find({数组:{$in:[任意一,任意二,任意三]}})
    

    1 .查看 orders 数组中包含有 [1,3,5,1000] 任意值的数据

    > db.c1.find({orders:{$in:[1,3,5,1000]}})
    { "_id" : ObjectId("5bdc3231b3d6a80c63a9a50a"), "name" : "user01", "age" : 10, "orders" : [ 1, 2, 3, 4 ] }
    { "_id" : ObjectId("5bdc3488b3d6a80c63a9a50c"), "name" : "lisi", "age" : 28, "orders" : [ 1, 2, 3, 4, 5 ] }
    

    数组查询: $nin

    #语法:         
        $nin    与 $in 相反
        > db.c1.find({数组:{$nin:[任意一,任意二,任意三]}})
    

    1 .查看 orders数组 中不包含 [5,1000] 的数据

    > db.c1.find({orders:{$nin:[5,1000]}})
    { "_id" : ObjectId("5bdc3231b3d6a80c63a9a50a"), "name" : "user01", "age" : 10, "orders" : [ 1, 2, 3, 4 ] }
    { "_id" : ObjectId("5bdc33f3b3d6a80c63a9a50b"), "name" : "zhangsan", "age" : 18, "hobby" : [ "basketall", "pingpong", "football", "volleyball" ] }
    

    4.5Key 查询:

    LIKE模糊查询

    #语法:
        /V/        # 包含V
        /^V/       # 依照 V 开头的
        /V$/       # 依照 V 结尾的
    
        > db.c1.find({key1:/V/})
    

    1 .查询出 name 字段包含 l 的

    > db.c1.find({name:/l/})
    { "_id" : ObjectId("5bdc3488b3d6a80c63a9a50c"), "name" : "lisi", "age" : 11, "orders" : [ 1, 2, 3, 4, 5 ] }
    { "_id" : ObjectId("5bdfec5b7be2fc7482d12255"), "name" : "xiaolin" }
    

    2 .查询出 name 字段依照 l 开头的

    > db.c1.find({name:/^l/})
    { "_id" : ObjectId("5bdc3488b3d6a80c63a9a50c"), "name" : "lisi", "age" : 11, "orders" : [ 1, 2, 3, 4, 5 ] }
    

    3 .查询出 name 字段依照 i 结尾的

    > db.c1.find({name:/i$/})
    { "_id" : ObjectId("5bdc3488b3d6a80c63a9a50c"), "name" : "lisi", "age" : 11, "orders" : [ 1, 2, 3, 4, 5 ] }
    

    $or 匹配多个关系值 或者

    #语法:
    > db.c1.find({$or:[{key1:"V1"},{"key2":"V2"}]})
    

    1 .查询 name:"lisi" 或者 "hobby":"pingpong" 的值

    > db.c1.find({$or:[{name:"lisi"},{"hobby":"pingpong"}]})
    { "_id" : ObjectId("5bdc33f3b3d6a80c63a9a50b"), "name" : "zhangsan", "age" : 18, "hobby" : [ "basketall", "pingpong", "football", "volleyball" ] }
    { "_id" : ObjectId("5bdc3488b3d6a80c63a9a50c"), "name" : "lisi", "age" : 28, "orders" : [ 1, 2, 3, 4, 5 ] }
    

    $nor 与 $or 相反

    #语法:
    > db.c1.find({$nor:[{key1:"V1"},{"key2":"V2"}]})
    

    1 .查询 不是 name:"lisi" 或者 "hobby":"pingpong" 的值

    > db.c1.find({$nor:[{name:"lisi"},{age:18}]})
    { "_id" : ObjectId("5bdc3231b3d6a80c63a9a50a"), "name" : "user01", "age" : 10, "orders" : [ 1, 2, 3, 4 ] }
    

    $and 并且条件 【两个条件都满足

    #语法:
    > db.c1.find({$and:[{key1:"V1"},{"key2":"V2"}]})
    

    1 .查询{name:"u02"} 并且 {age:10} 的数值

    > db.c1.find({$and:[{name:"u02"},{age:10}]})
    { "_id" : ObjectId("5bdfe8e07be2fc7482d12254"), "name" : "u02", "age" : 10, "add" : "bj" }
    

    2 .查询两个时间戳之间的数据总个数

    db.c1.find({$and:[{timestamp:{$lt:1535731200}},{timestamp:{$gt:1535731200-86400*31}}]}).count()
    

    $exists 是否包含该字段key

    #语法:
    > db.c1.find({key:{$exists:0}})
    

    1 .查询出 包含 hobby 字段的数据

    > db.c1.find({hobby:{$exists:1}})
    { "_id" : ObjectId("5bdc33f3b3d6a80c63a9a50b"), "name" : "zhangsan", "age" : 18, "hobby" : [ "basketall", "pingpong", "football", "volleyball" ] }
    

    2 .查询出 不包含 hobby 字段的数据

    > db.c1.find({hobby:{$exists:0}})
    { "_id" : ObjectId("5bdc3231b3d6a80c63a9a50a"), "name" : "user01", "age" : 10, "orders" : [ 1, 2, 3, 4 ] }
    { "_id" : ObjectId("5bdc3488b3d6a80c63a9a50c"), "name" : "lisi", "age" : 28, "orders" : [ 1, 2, 3, 4, 5 ] }
    

    4.6游标:

    将查询结果赋值给 一个变量 通过next 一个一个抛出,全部抛出后在执行next 抛出异常

    1 .将集合 c1 中的数据全部赋值给 a1 变量:

    > var a1 = db.c1.find()
    

    2 .查看a1变量是否还有数据

    > a1.hasNext()
    true
    

    3 .从a1变量中抛出一个值

    > a1.next()
    {
            "_id" : ObjectId("5bdc33f3b3d6a80c63a9a50b"),
            "name" : "zhangsan",
            "age" : 18,
            "hobby" : [
                    "basketall",
                    "pingpong",
                    "football",
                    "volleyball"
            ]
    }
    

    4 .当a1为空时,hasNext 值为 false

    > a1.hasNext()
    false
    

    5更改:update 【$set 、 $inc】

    5.1 $set 修改

    #语法:
    $set  修改
    更新有4个参数:
    语法:
        db.table.update({criteria},{$set:{objNew}},upsert,multi)
        db.集合.update({key1:V1},{$set:{key2:v2}},0,1)
     
    参数说明:
        criteria:用于设置查询条件的对象
        objNew:  用于设置更新内容对象
        upsert:   如果记录已经存在,更新它,否则新增一条记录,取值为 0 或 1    【0存在更新,不存在忽略;1存在更新,不存在增加】
        multi:    如果有多个符合条件的记录,是否全部更新,取值为 0 或 1        【0更新第一条,1更新所有符合条件的】
    

    1 .将名字name:"user01" 条件,age 更改为 20

    > db.c1.update({name:"user01"},{$set:{age:20}},0,1)
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    

    2 .将name:"user01",name:"lisi" 的age 更改为 11

    > db.c1.update({$or:[{name:"user01"},{name:"lisi"}]},{$set:{age:11}},0,1)
    WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })
    

    3 .将name:"user01" 添加一个字段 addr

    > db.c1.update({name:"user01"},{$set:{addr:"beijing"}},0,1)
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    

    4 .将name:"user01" 删除一个key字段 addr 【$unset】

    > db.c1.update({name:"user01"},{$unset:{addr:1}},0,1)
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    

    5.2 $int类型加减

    #语法:
    int类型加减
    注:只针对int 类型
    语法:
        db.table.update({条件},{$inc:{key1:int}},0,1)
    

    1 .将 name:"lisi" 的age 加 1

    > db.c1.update({name:"lisi"},{$inc:{age:1}},0,1)
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    

    2 .将name:"lisi",name:"zhangsan" 的 age 减 1

    > db.c1.update({$or:[{name:"lisi"},{name:"zhangsan"}]},{$inc:{age:-1}},0,1)
    WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })
    
  • 相关阅读:
    vim 插件之commentary
    vim-进入插入模式快捷键
    adb logcat 使用
    操作excel脚本练习
    python-openpyxl安装
    python-excel操作之xlrd
    adb-端口被占用解决办法(win)
    打不开微信分享的链接
    在BUG分支下创建分支,开发后合并到bus分支
    css缓存问题
  • 原文地址:https://www.cnblogs.com/baolin2200/p/10070079.html
Copyright © 2011-2022 走看看