1.创建局部变量post
post={"title": "My Blog Post",
"content": "Here is my blog post.",
"date": new Date()}
2.将post插入当前数据库blog集合
db.blog.insert(post)
3.使用find方法查看
db.blog.find().pretty()
4.只查看集合中一个文档使用findOne方法
db.blog.findOne()
5.update接受(至少)两个参数:
第一个是要更新文档的限定条件
第二个是新的文档
任务:给之前文章增加评论内容
首先修改变量post,增加“comment”键:
post.comments = []
然后执行update操作,用新的文档替换标题为“My Blog Post”的文章:
db.blog.update({title: "My Blog Post"}, post)
使用find进行查看:
db.blog.find().pretty()
6.remove用来从db中永久性删除文档。
在不使用参数进行调用的情况下,它会删除一个集合内所有文档。
它也可以接受一个文档以指定限定条件。
删除刚刚创建的文档:
db.blog.remove({"title": "My Blog Post"})
7.db.help()可查看数据库级别的命令的帮助。
集合的相关帮助可以通过db.集合名.help()来查看
8.db.version()可查看当前运行的MongoDB服务器的版本。
9.db.集合名
访问集合一般没有问题
当访问集合名与数据库类的属性重名时,使用getCollection()函数进行访问,如:
db.getCollection("version")
插入并保存文档
10.对目标集使用insert方法插入一个文档
db.foo.insert({“bar” : “baz”}
删除文档
11.删除user集合中所有的文档(不会删除集合本身,原有的索引保留):
db.users.remove()
remove可接受一个查询文档作为可选参数。给定参数后,只有符合条件的文档才会被删除,
任务:删除mailing.list集合中所有”optout”为true的人:
db.mailing.list.remove( {“optout”: true} )
12.删除集合 db.集合名.drop()
速度更快,但没有任何限制条件,集合和索引都不见了。
更新文档
13.update
有两个参数,一个是查询文档,用来找出要更新的文档;
另一个是修改器文档,描述找到的文档做哪些修改。
文档替换
14.最好确保更新总是指定唯一文档
例如通过“_id”这样的键来匹配,否则可能会出现因集合中已有相同“_id”的文档导致出错。
使用修改器
15.例子:插入网站点击量统计文档
> db.analytics.insert(
... {
... "url" :"www.example.com",
... "pageviews" :52
... }
... )
每有人访问页面,就会通过url找到该页面。
使用“$inc”修改器增加“pageviews”的值:
> db.analytics.update({ "url" : "www.example.com"},
... {"$inc" : {"pageviews" : 1 }})
接着使用find操作,会发现“pageviews”增加了1。
16.使用修改器时“_id”的值不能改变。
整个文档替换时可以替换“_id”的值。其他键值,包括其他唯一索引的键,均可改变。
一、“$set”修改器入门
增加、修改或删除键时,应使用
修改器。“
修
改
器
。
“
set”用来指定一个键的值。如果键不存在,则创建它。
例如,插入一个用户的资料:
> db.user.insert({
... "name" : "joe",
... "age" : 30,
... "sex" : "male",
... "location" : "Wisconsin"
... }
... )
添加自己喜欢的书籍进去:
> db.user.update({"_id" : ObjectId("5a7a5e5aa6757e91d745c718")},
... {"$set" : {"favoriite book" : "war and peace"}})
如果用户喜欢另一本书:
db.user.update({"_id" : ObjectId("5a7a5e5aa6757e91d745c718")}, {"$set" : {"favoriite book" : "green eggs and ham"}})
$set还可以修改键的类型。例如,用户喜欢一堆书:
db.user.update({"_id" : ObjectId("5a7a5e5aa6757e91d745c718")}, {"$set" : {"favoriite book" : ["cat's cradle","foundation trilogy","ender's game"]}})
可用$unset将键完全删除,例如用户发现自己不爱读书:
db.user.update({"_id" : ObjectId("5a7a5e5aa6757e91d745c718")}, {"$unset" : {"favoriite book" : 1}})
也可以用$set**修改内嵌文档**:
db.blog.post.insert({
... "title" : "A Blog Post",
... "content" : "...",
... "author" :{
... "name" : "joe",
... "email" : "joe@example.com"
... }
... })
二、增加和减少
$inc修改器用于增加已有键值,或者在键不存在时创建一个键。
例如建立一个游戏集合,游戏和分数变化都存储在里面
db.games.insert({"game":"pinball", "user": "joe"})
每次游戏胜利积分加50:
db.games.update({"user" : "joe"},{"$inc" : {"score":50}})
每次游戏胜利积分加100:
db.games.update({"user" : "joe"},{"$inc" : {"score":100}})
$inc键的值必须为数字,不能用字符串、数组或其他非数字的值。
三、数组修改器
如果指定键已存在,$push会向已有数组末尾加入一个元素,没有则创建一个新的数组。
例如,向博客文章加入一个包含一个数组的“comment”键。
db.blog.post.update({"title" : "A Blog Post"},{"$push":
... {"comments":{
... "name" : "joe",
... "email" : "joe@example.com",
... "content" : "nice post."}
... }
... })
接着添加一条评论
db.blog.post.update({"title" : "A Blog Post"},{"$push": {"comments":{ "name" : "bob", "email" : "joe@example.com", "content" : "nice post."} } })
$ne如果一个值不在数组中则把它添加入数组
db.papers.update({“authors cited” : {“$ne” : “Richie”}},
{“$push : { “author cited” : “Richie”}})
使用$addToSet更好,避免重复的进行插入
将
addToSet和
a
d
d
T
o
S
e
t
和
each组合起来,可以添加多个不同的值。
db.user.update({“_id”:^^^^^},
{“$addToSet” : {“emails” :{“$each” :[
“joe@php.net”, "joe@python.org”]}}})
$pop可以从数组任一端删除元素,而不仅仅是依据位置。
{“$pop” : {key :1}} //从数组尾部删除一个元素
{“$pop”:{key:-1}} //从头部删除
db.blog.post.update({“title” : “A Blog Post”},{“$pop”: {“comments”:{key:1 }} })
$pull可以基于特定条件来删除元素(所有匹配的都删掉)。
> db.lists.insert({"todo" : ["dishes","laundry","dry cleaning"]})
> db.lists.update({ },{"$pull" : {"todo" : "laundry"}})
四、数组定位修改器
数组有多个值,只想对其中一部分操作:通过位置(数组下标)或定位操作符($)。
例如,增加第一个评论的投票数量,
db.blog.update( {“post” : post_id},
{“$inc” : {“comments.0.votes” : 1}})
但很多时候需要查询来修改,可使用”$”来定位文档已经匹配的元素,并进行更新。
db.blog.update({“comments.author” : “John”},
{“$set” : {“comments.$.author” : “Jim”}})
定位符只更新匹配到的第一个元素。
Upsert
若没有文档符合更新条件,就会以条件和更新文档为基础创造一个新的文档。若找到匹配文档,则正常更新。
通过update第三个参数来执行upsert
db.math.update({"count" : 25}, {"$inc" : {"count" : 3 } }, true)
save可以在文档不存在时插入,存在时更新。
更新多个文档
默认情况下,update只能对符合情况的第一个文档执行操作。
使所有匹配到的文档都得到更新,设置update第四个参数为true。
db.students.update({"CSRQ":19980106},
.. ... {"$set": {"gift" : "Happy Birthday!"}},false,true)