本文主要是介绍Mongodb修改器的使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1 修改器
1.1 $set修改器
【1】说明
$set用来指定一个键的值;
如果键不存在,则创建它;
【2】练习
a.使用集合blog的一个文档
--db.blog.find() /* 1 */ { "_id" : ObjectId("57f9eabbd01d44ba3aaeb26c"), "title" : "my blog post", "content" : "update", "date" : ISODate("2016-10-09T06:51:54.710Z") } |
b.此文档添加喜欢的书籍
/* db.blog.update( {"_id" : ObjectId("57f9eabbd01d44ba3aaeb26c")}, {"$set":{"favorite book":"war and peace"}} ) */ |
c.查看添加之后的结果
/* 1 */ { "_id" : ObjectId("57f9eabbd01d44ba3aaeb26c"), "title" : "my blog post", "content" : "update", "date" : ISODate("2016-10-09T06:51:54.710Z"), "favorite book" : "war and peace" } |
d.修改此文档,favorite book喜欢的数据
db.blog.update( {"_id" : ObjectId("57f9eabbd01d44ba3aaeb26c")}, {"$set":{"favorite book":"green eggs and ham"}} ) |
【3】使用set修改内嵌文档(使用.)
a.准备内嵌文档
var a=db.blog.findOne(); a.author={"name":"clark","email":"xu_chl@163.com"}; db.blog.update( {"_id" : ObjectId("57f9eabbd01d44ba3aaeb26c")}, a ); |
b.修改内嵌文档
db.blog.update( {"_id" : ObjectId("57f9eabbd01d44ba3aaeb26c")}, {"$set":{"author.name":"xu_chl"}} ) |
--result:
/* 1 */ { "_id" : ObjectId("57f9eabbd01d44ba3aaeb26c"), "title" : "my blog post", "content" : "update", "date" : ISODate("2016-10-09T06:51:54.710Z"), "favorite book" : "green eggs and ham", "author" : { "name" : "xu_chl", "email" : "xu_chl@163.com" } } |
1.2 $inc修改器
【1】描述
$inc修改器用来增加已经有键的值,或者在键不存在的时候创建一个键
用途:分析数据,投票,其他变化数值的地方
【2】联系-游戏
a.场景:
射击游戏,子弹打在靶子上,给玩家加分
b.创建一个文档
db.games.insert( {"game":"shooting","user":"clark"} ) |
b.射击中靶一次,增加5分
db.games.update( {"game":"shooting","user":"clark"}, {"$inc":{"score":5}} ) |
c.射击中靶心,加分50分
db.games.update( {"game":"shooting","user":"clark"}, {"$inc":{"score":50}} ) |
d.结果为
/* 1 */ { "_id" : ObjectId("57fb3bdcd01d44ba3aaeb26d"), "game" : "shooting", "user" : "clark", "score" : 55.0 } |
【3】特别注意:
$inc只允许是数字类型;Modifier$inc allowed for numbers only;
1.3 数组修改器
【1】说明
如果键存在,$push会向已有的数组末尾加入一个元素
如果键不存在,则创建新的数组
【2】练习
a.目的:添加一个包含一个数组的comments键
b.增加键comments,值是数组,包含两个元素
db.blog.update( {"_id" : ObjectId("57f9eabbd01d44ba3aaeb26c")}, {"$push":{"comments": [{"name":"xuclc","email":"xchl00@163.com"}, {"name":"clark","email":"xu_chl@163.com"} ] } } ) |
c.查看结果
/* 1 */ { "_id" : ObjectId("57f9eabbd01d44ba3aaeb26c"), "title" : "my blog post", "content" : "update", "date" : ISODate("2016-10-09T06:51:54.710Z"), "favorite book" : "green eggs and ham", "author" : { "name" : "xu_chl", "email" : "xu_chl@163.com" }, "comments" : [ [ { "name" : "xuclc", "email" : "xchl00@163.com" }, { "name" : "clark", "email" : "xu_chl@163.com" } ] ] } |
d.修正
var a=db.blog.findOne(); delete a.comments; db.blog.update( {"_id" : ObjectId("57f9eabbd01d44ba3aaeb26c")}, a ); db.blog.findOne();
db.blog.update( {"_id" : ObjectId("57f9eabbd01d44ba3aaeb26c")}, {"$push":{"comments": {"name":"xuclc","email":"xchl00@163.com"} } } );
db.blog.update( {"_id" : ObjectId("57f9eabbd01d44ba3aaeb26c")}, {"$push":{"comments": {"name":"clark","email":"xu_chl@163.com"} } } ) db.blog.findOne(); |
【3】查询文档$ne和$push的联合使用
a.场景:一个值如果不在数组中,就加入到数组中,否则就不加;
b.语句
--正确的语句:
db.blog.update( {"comments.name": {"$ne":"clark"} }, {"$push":{"comments": {"name":"clark","email":"xu_chl@163.com"} } } ); |
--错误的语句
db.blog.update( {"comments": {"$ne":"clark"} }, {"$push":{"comments": {"name":"clark","email":"xu_chl@163.com"} } } ); |
【4】$addToSet 避免重复
a.测试重复push:--无法插入
db.blog.update( {"_id" : ObjectId("57f9eabbd01d44ba3aaeb26c")}, {"$addToSet":{"comments": {"name":"clark","email":"xu_chl@163.com"} } } ); |
【5】$addToSet和$each
a.初始化
var a=db.blog.findOne(); delete a.comments; db.blog.update( {"_id" : ObjectId("57f9eabbd01d44ba3aaeb26c")}, a ); db.blog.findOne();
db.blog.update( {"_id" : ObjectId("57f9eabbd01d44ba3aaeb26c")}, {"$addToSet":{ "comments":{ "$each":[{"name":"clark","email":"xu_chl@163.com"}, {"name":"xuclc","email":"xchl00@163.com"} ] } } } ); |
b.再次执行
db.blog.update( {"_id" : ObjectId("57f9eabbd01d44ba3aaeb26c")}, {"$addToSet":{ "comments":{ "$each":[{"name":"clark","email":"xu_chl@163.com"}, {"name":"xuclc","email":"xchl00@163.com"} ] } } } ); |
发现,无法插入了
【5】$pop
a.作用:把数组看成一个栈,删除数据
b.使用:{$pop:{key:1}}从末尾删除
{$pop:{key:-1}}从头部删除
这篇关于Mongodb修改器的使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!