zoukankan      html  css  js  c++  java
  • MongoDB学习笔记3——使用数据

    1.浏览数据库

    1)创建使用数据库

    use library (library是数据库名,使用这个语句可以切换到已有的数据库或者是创建新的数据库)。

    2)查看所有的数据库

    show dbs

    2.在集合中插入数据

    1)第一种方法

    document = (  {

    “Type”:"CD",

    “Artist”:"Nirvana",

    "Title":"Nevermind",

    "Genre":"Grunge",

    "Releasedate":"1991.09.24",

    "TrackList":[

        {

         "Track":"1",

              "Title":"Smells Like Teen Spirit",

         "Length":"5:02",

      },

      {

         "Track":"2",

              "Title":"In Bloom",

         "Length":"4:15",

      },

      ]

    } )

    db.media.insertOne(document)  (其中media表示数据库中的表)

    2)第二种方法

    db.media.insertOne(

    {

    “Type”:"CD",

    “Artist”:"Nirvana",

    "Title":"Nevermind",

    "Genre":"Grunge",

    "Releasedate":"1991.09.24",

    "TrackList":[

        {

         "Track":"1",

              "Title":"Smells Like Teen Spirit",

         "Length":"5:02",

      },

      {

         "Track":"2",

              "Title":"In Bloom",

         "Length":"4:15",

      },

      ]

    }

    )

    3.查询数据

    db.media.find()

    db.media.find({"Type":"CD"})

    db.media.find().sort({title:1})(基于Title键的值对结果进行升序排序)

    db.media.find().limit(10)  (限制返回结果最大数目)

    db.media.find().skip(20)  (忽略掉集合中的前n个文档)

    也可以组合使用:

    db.media.find().sort({Title:-1}).limit(10).skip(20)

    在查询数据中使用固定集合、自然顺序和$natural

    固定集合(capped collection)是数据库的一种集合,它的自然顺序保证与文档插入的顺序一致。

    db.createCollection("audit",{capped:true,size:20480})

    逆转默认结果的顺序

     db.audit.find().sort({$natural:-1}).limit(10)

    使用max:参数限制插入到固定集合中的文档数目

    db.createCollection("audit100",{capped:true,size:20480,max:100})

    state()用于检查集合的大小

    db.audit100.stats()

    获取单个文档

    db.media.findOne()

    使用聚集命令:

    使用count()函数返回文档的数目

    db.media.count()

    使用过滤语句

    db.media.find({Publisher:"Apress",Type:"Book"}).count()

    db.media.find({Publisher:"Apress",Type:"Book"}).skip(2).count(true)

    使用distinct()函数获取唯一值

    db.media.distinct("ISBN")

    执行大于和小于比较:

    特殊符号:$gt,$lt,$gte,$lte

    db.media.find({Release:{$gte:1990,$lt:2010}},{"cast":0})

    其他特殊符号:$ne(不等于)

    db.media.find({Type:"Book",Author:{$ne:"Plugge, Eelco"}})

    指定一个匹配的数组$in

    db.media.find({Released:{$in:[1999,2008,2009]}},{"cast":0})

    查找某个不在数组中的值$nin用法与$in类似

    $all要求文档的所有属性都匹配

    $or在文档中搜索多个表达式

    db.media.find({$or:[{"Title":"Toy Story 3"},{"ISBN":"978-1-4842-1183-0"}]})

    使用$slice获取文档:

    $slice:3 前三项,$slice:-3 后三项,$slice:[2,3] 从第2项开始的3个数据项,$slice:[-5,4]从倒数第5项开始的倒序输出4项。

    搜索奇数/偶数$mod:[2:0]、$mod:[2:1]

    通过操作符$size可以滤出文档中数组大小符合条件的结果。

    使用$exists操作符将在特定字段存在或不存在情况下返回该对象。

    使用操作符$type可以基于数据的BSON类型匹配结果,例如$type:3

    使用$not元操作符可以否定任何标准操作符执行的检查。

    使用正则表达式,以一个左锚点("A")或插入符号(^)开头,例如:db.media.find({Title:/^Matrix*/i})

    4.更新数据

    使用update()更新:

    db.media.updateOne()

    db.media.updateMany(),如果存在多个文档符合条件,并希望对它们全部执行update,要使用$set

    使用save()来执行upsert:db.media.save()

    自动更新信息使用$inc:

    db.media.updateOne({"Title":"One Piece"},{$inc:{"Read":4}})

    db.media.find({"Title":"One Piece"}) (执行完之后,Read增加4)

    设置字段值:使用$set和$unset

    在指定字段中添加某个值:

    db.media.updateOne({"ISBN":"978-1-4842-1183-0"},{$push:{Author:"Griffin,Stewie"}})

    在指定字段中添加多个值:

    db.media.updateOne({"ISBN":"978-1-4842-1183-0"},{$push:{Author:{$each:["Griffin,Stewie","Griffin,Peter"}}})

    使用$addToSet向数组中添加数据

    db.media.updateOne({"ISBN":"978-1-4842-1183-0"},{$push:{Author:{$addToSet:["Griffin,Stewie","Griffin,Peter"}}})

    从数组中删除元素

    db.media.updateOne({"ISBN":"978-1-4842-1183-0"},{$pop:{Author:1})

    db.media.updateOne({"ISBN":"978-1-4842-1183-0"},{$pop:{Author:-1})

    通过使用$pull操作符可以从数组删除所有指定值

    db.media.updateOne({"ISBN":"978-1-4842-1183-0"},{$pull:{Author:"Griffin,Stewie"})

    db.media.updateOne({"ISBN":"978-1-4842-1183-0"},{$pullAll:{Author:{["Griffin,Stewie","Griffin,Peter"}}})

    5.原子操作

    MongoDB支持针对单个文档的原子操作。满足以下条件的,可以称之为原子操作:

    1)其他进程无法获得修改的结果,除非整组操作都已经完成。

    2)如果其中一个操作失败,整组操作(整个原子操作)都将失败,并全部回滚,数据将被回复值运行原子操作之前的状态。

    在原子操作中可以使用$set,$unset,$inc,$push,$pull,$pullAll

    还可以使用Update if Current方法来实现数据的更新

    db.media.updateOne({"Tracklist.Title":"Been a son"},{$inc:{"Tracklist.$.Track":1}})

    还可以通过执行findAndModify命令来实现对文档的原子操作

    db.media.findAndModify({query:{"ISBN":"987-1-4842-1183-0"},sort:{"Title":-1},update:{$set:{"Title":"Different Title"}},new:true})

    6.批处理数据

    使用initializeOrderedBulkOp()函数,如果发生一个错误,操作就会停止

    var bulk = db.media.initializeOrderedBulkOp();

    bulk.insertOne({"Type":"Movie","Title":"Deadpool","Released":2016});

    执行批处理,使用execute()

    bulk.execute()

    7.集合重命名集合

    db.media.reanameCollection("newname")

    8.删除数据

    db.newname.deleteOne({"Title":"Different Title"})

    db.newname.deleteMany({})

    删除整个集合

    db.newname.drop()

    删除数据库

    db.dropDatabase()

    9.引用数据库(手动引用或者是使用DBRef标准)

    手动:

    db.publishercollection.insertOne(apress)

    db.publishercollection.findOne({_id:book.Publisher})

    使用DBRef引用数据:

    book = { "Type":"Book","Title":"Definitive Guide to MongoDB 3rd ed., The", "ISBN":"978-1-4842-1183-0","Author":["Hows, David","Membrey,Peter","Plugge, Eelco","Hawins,Tim"],Publisher:[new DBRef('publishercollection','apress._id)]}

    db.media.save(book)

    10.使用与索引相关的函数

    1)CreateIndex():升序或降序索引

    db.media.CreateIndex({"Tracklist.Title":1})

    2)通过hint()函数可以强制使用某个特定的索引查询数据。

    db.media.ensureIndex({ISBN:1},{background:true});

    db.media.find({ISBN:"978-1-4842-1183-0}).hint({ISBN:1})

    3)min()和max()

    相当于大于小于

    db.media.find().min({Released:1995}).max({Released:2005})

  • 相关阅读:
    UVA 1590 IP Networks
    UVA 12108
    HDUOJ 1042 N!
    UVA201 Squares
    UVaOJ 1339
    UVaOJ 202
    UVaOJ 100
    UVaOJ 10340
    第五章 跳跃表
    第四章 字典
  • 原文地址:https://www.cnblogs.com/zhuozige/p/12439208.html
Copyright © 2011-2022 走看看