mongodb使用

作者: 陆_志东 | 来源:发表于2018-07-11 13:23 被阅读2次

    shell连接mongodb

    mongodb://username:password@ip:port[/dbname]
    mongo --host 127.0.0.1 --port 27017-u test-p test --mymongo
    

    创建数据库

    使用use创建数据库,格式为:
    use dbname 
    需要注意的是mongo新建的数据库只有添加数据之后才算成功创建
    

    查看当前使用的数据库

    db; (推荐) 
    或
    db.getName();
    

    查看所有数据库

    show dbs;
    

    删除当前正在使用的数据库

    db.dropDatabase()
    删除当前正在使用的数据库
    

    查看当前使用的数据库下所有的集合

    show tables;
    

    删除集合

    语法: db.collection.drop()  # collection指集合的名字
    示例:
    >show tables;
    mymongo
    >db.mymongo.drop()
    true
    >show tables;
    >    # 没有集合显示了,删除成功
    

    创建集合

    语法格式:db.createCollection(name[,capped,autoIndexId,size,max])
    可选参数详解:
    capped(可选):布尔类型;如果设置为true,指创建固定大小的集合,
                 如果设置为true,一定要设置size.达到size的最大值的时候,他会覆盖之前的文档
    atuoIndexId(可选):布尔类型;
                 如果设置为true,则自动在_id字段创建索引.默认为false
    size(可选):数值;为集合设置一个固定的最大值
    max(可选):数值;指定集合中包含的文档的最大数量
    
    mongo其实会在你添加数据的时候自动创建集合
    示例:
    手动创建集合:
    >use test
    switched to db test
    >db.createCollection("mycoll")
    {"ok":1}
    >show tables;
    mycoll
    
    创建固定集合,空间大小为6142800KB,文档最大个数1000
    db.createCollection("mycoll1", { capped : true, autoIndexId:true, size : 6142800, max : 10000 } )
    
    自动创建集合
    >db.mycoll2.insert({"name":"Nick"})
    >show tables;
    mycoll
    mycoll1
    mycoll2
    

    查看所有集合

    show tables;
    或
    show collections;
    

    插入文档

    插入有两种方法 insert()和save().不过save()还有更新的功能
    语法: db.collection_name.insert(document)
    比如存一条文档到 mycoll 集合中
    
    >use test;
    >db.mycoll.insert({"name":"Nick"})
    
    mycoll是集合名字,如果mycoll在插入文档之前不存在,mongo会自动的创建集合并插入数据
    

    更新文档

    使用update方法或者save方法
    语法:
    db.collection.update(
        <query>,
        <update>,
        {
            upsert:<boolean>,
            multi:<boolean>,
            writeConcern:<document>
        }
    )
    参数详解:
    query: update的查询条件,类试于mysql语句的where
    update:更新的对象和更新用到的操作符
    upsert(可选):如果不存在query匹配到的结果,是否将更新的内容作为新纪录插入.默认false,不插入
    multi(可选):默认为false,只更新匹配所有结果中的第一条结果,如果为true,意为全部更新
    writeConcern(可选):抛出异常的级别
    
    
    示例
    >db.mycoll.insert({"name":"lzd"});
    >db.mycoll.update({"name":"lzd"},{$set:{"desc":"to be nick"}});
    
    save()方法语法:save方法是利用_id进行文档替换式的更新,update是局部的更新
    
    db.collection_name.save()
    

    删除文档

    语法:
    db.collection.remove(
       <query>,
       {
         justOne: <boolean>,
         writeConcern: <document>
       }
    )
    
    参数详解:
    query  查询条件
    justOne(可选): 如果设置为true或者1 则只删除匹配到的一条结果,而不是全部,默认为false,删除全部
    writeConcern(可选) 抛出异常的级别
    

    mongo查询文档语法

    语法:
    db.collection.find(query,projection)
    
    db.collection.find()  指查询所有文档,类试select * from table;
    参数介绍:
    query(可选),使用查询操作符指定的查询条件
    projection(可选):返回哪些键值对,省略该参数返回文档所有键值对.
    
    如果想要返回的数据更易读,使用pretty()
    db.collection.find().pretty()
    
    where 的mongo语法:
    等于          {<key>:<value>}          db.col.find({"by":"菜鸟教程"}).pretty()    where by = '菜鸟教程'
    小于          {<key>:{$lt:<value>}}   db.col.find({"likes":{$lt:50}}).pretty()    where likes < 50
    小于或等于     {<key>:{$lte:<value>}}    db.col.find({"likes":{$lte:50}}).pretty()   where likes <= 50
    大于          {<key>:{$gt:<value>}}   db.col.find({"likes":{$gt:50}}).pretty()    where likes > 50
    大于或等于    {<key>:{$gte:<value>}} db.col.find({"likes":{$gte:50}}).pretty()   where likes >= 50
    不等于        {<key>:{$ne:<value>}}    db.col.find({"likes":{$ne:50}}).pretty()    where likes != 50
    
    and条件, 一个字典里面包含多个键值对,多个键值对是and关系
    db.collection.find({key1:value1, key2:value2}).pretty()
    示例:
    db.mycoll.find({"name":"lzd","desc":"to be Nick"}).limit(1).pretty()
    
    or条件 ,一个列表存放多个字典,多个字典是or关系,or关系可以和and同时使用
    db.collection.find([{key0:value0,key1:value1},{key2:value2}])
    # key0和key1是and关系 ,key0和key1组成的条件与key2条件是or关系
    

    查询语句的limit方法 和 skip 方法

    limit(num) 指定从数据库读取num条数据
    skip(num)指定从数据库跳过多少条数据开始读取
    skip和limit可以结合使用

    mongo查询语句的排序sort

    语法:
    db.collection.find().sort({KEY:1/-1})
    KEY 是字段名,即根据哪个字段排序, 1 代表升序排序,-1代表降序

    mongo创建索引

    语法:db.collection.createIndex(keys,options)
    keys为你要创建索引的字段, 1为指定按升序索引, -1按降序索引
    示例:
    db.mycoll.createIndex({"name":1})
    还可以创建联合索引
    db.mycoll.createIndex({"name":1,"desc":-1})

    mongo 聚合查询 参考请点击连接

    示例:
    db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])
    详解:
    _id这个key是定死的不能改,$group 也不能改
    num_tutorial 这个是可以改的,聚合的结果名字,可以自定义
    $by_user 代表根据文档中的by_user字段分组,$类试shell语法取变量值的意思
    $likes和$by_yser一样效果

    下面是所有聚合的例子(图片来源菜鸟教程)


    聚合查询

    聚合查询的其他操作符

    其他操作符

    $project 实例

    db.collection.aggregate({
    $project:{
        tiltle:1,
        author:1
    }
    })
    上面的例子使返回的结果只包含_id,title,author字段(_id字段默认包含)
    如果想要不包含_id字段
    db.collection.aggregate({
    $project:{
        _id:0,
        tiltle:1,
        author:1
    }
    })
    

    $match实例

    db.collection.aggregate([
        {$match:{score:{$gt:60,$lt:80}}},
        {$group:{_id:"$class",avg:{$avg:"$score"}}}
    ])
    
    match 获取分数大于60小于80的所有文档,然后交给group去处理,使用了管道的原理
    group这里的处理是根据class分组,然后计算每个class的平均分
    

    相关文章

      网友评论

        本文标题:mongodb使用

        本文链接:https://www.haomeiwen.com/subject/dipqpftx.html