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