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})

posted on 2020-03-07 23:21  桌子哥  阅读(223)  评论(0编辑  收藏  举报