设为首页 收藏本站
查看: 964|回复: 0

[经验分享] mongo DB 第一天

[复制链接]

尚未签到

发表于 2016-12-2 08:53:54 | 显示全部楼层 |阅读模式
  最近没事看来一下mongoDB,貌似很牛逼的样子.因为他不像通常的关系型数据库那么多的约束.而且语法看上去和js一样.

mongod --dbpath C:\zhuyang\zhuyang\mongodb\mongodb\db
---insert
db.person.insert({"name":"zhuyang","sex":"male")
db.person.insert({"name":"hello","sex":"world"})
person = {"name":"nametest","sex":"sextest"}
db.person.insert(person)
---find
db.person.find()
db.person.find({"name":"nametest"})
db.person.findOne()
--update
db.person.update({"name":"nametest"},{"sex":"testupdate"})
--remove
db.person.remove({"name":"nametest"})
db.person.remove({"sex":"testupdate"})

--------------some command
help  ----see help doc
db.help();  --to see some command of db level
db.foo.help()  ----help of collections
to see the funcion implementation can use function name directly. eg: db.foo.update


---------insert to doc -------------
--insert one record
db.foo.insert({"firstname":"zhu"}) --after this sentence , db will add another _id key(if doesnt defined) and save to doc.see below
db.foo.insert({"lastname":"yang"})
db.foo.insert({"firstname":"chen"})
> db.foo.find()
{ "_id" : ObjectId("52ce585fe2e2fd0a66329ee3"), "firstname" : "zhu" }
------------batch insert
use mongoimport
file<4MB, need a field name _id
-----------remove doc
db.foo.remove()  ---remove all
db.foo.remove({"firstname":"chen"}) ---remove one record
------update doc ------
see below
db.user.insert(
{
"firstname":"zhu",
"lastname":"yang",
"friends":32,
"enemies":2
}
)

CHANGE TO
{
"username":"zhuyang",
"relation":
{
"friends":32,
"enemies":2
}
}
var zhuyang = db.user.findOne({"firstname":"zhu"})
zhuyang.relation={
"friends":zhuyang.friends,
"enemies":zhuyang.enemies
}
zhuyang.username="zhuyang"
delete zhuyang.firstname
delete zhuyang.lastname
delete zhuyang.friends
delete zhuyang.enemies
db.user.update({"firstname":"zhu"},zhuyang)

$set 修改器入门
db.user.insert(
{
"name":"joe",
"age":30,
"sex":"male",
"location":"shanghai"
}
)
//想要添加一个新的字段favorite book
//可用下面 2种办法
//1. 用update()
var joe = db.user.findOne({"name":"joe"})
joe.favoritebook="java";
db.user.update({"name":"joe"},joe);
//2. 使用修改器$set
db.user.update(
{
"name":"joe"
},
{
"$set":{
"favoritebook":"c++"
}
}
)
//也可以将favorite book改成一个数组
db.user.update(
{
"name":"joe"
},
{
"$set":{
"favoritebook":[
"c++","c##","perl"
]
}
}
)

//使用$unset 去移除
db.user.update(
{
"name":"joe"
},
{
"$unset":{
"favoritebook":1
}
}
)
//使用$set 修改内嵌文档
db.blog.posts.insert({
"title":"java test",
"content":"this is content",
"author":{
"name":"sb",
"mail":"hello@gmail.com"
}
}
)
//修改作者名字为joe zhu
db.blog.posts.update(
{
"author.name":"sb"
},
{
"$set":
{
"author.name":"joe zhu"
}
}
)
//$inc 修改器用来增加已有键的值,或者在键不存在的时候创建
db.games.insert(
{
"game":"pinball",
"user":"joe"
}
)
//如果小球碰到了砖块,就会给玩家加分.分数随便给,这里把玩家的基数分数设做50.使用$inc  给玩家加50

db.games.update(
{
"game":"pinball",
"user":"joe"
},
{
"$inc":{
"score":50
}
}
)
//之前分数键是不存在的,所以用$inc创建了一个score键,并加量50
//如果小球落到指定位置,那么则加上1000分.
db.games.update(
{
"game":"pinball",
"user":"joe"
},
{
"$inc":{
"score":1000
}
}
)
//现在的分数变成了50+1000=1050了

//数组修改器
//如果指定的键已经存在,那么$push就会向已有的数组末尾加上一个元素,否则就会创建一个新的数组.
db.blog.posts.findOne({"author.mail":"hello@gmail.com"});
{
"_id" : ObjectId("52cf9f70cae129f46ff6fa5d"),
"author" : {
"mail" : "hello@gmail.com",
"name" : "joe zhu"
},
"content" : "this is content",
"title" : "java test"
}
//比如现在要添加一个数组comments键.并发布一条评论:
db.blog.posts.update(
{
"author.mail":"hello@gmail.com"
},
{
"$push":{
comments:{
"name":"zhu",
"email":"zzzzzz5530041@gmail.com",
"content":"nice one"
}
}
}
);
> db.blog.posts.find()
{ "_id" : ObjectId("52cf9f70cae129f46ff6fa5d"), "author" : { "mail" : "hello@gmail.com", "name" : "joe zhu" }, "comments" : [   {       "name" : "zhu",         "email" : "zzzzzz5530041@gmail.com",
"content" : "nice one" } ], "content" : "this is content", "title" : "java test" }
//如果还要添加一条评论
db.blog.posts.update(
{
"author.mail":"hello@gmail.com"
},
{
"$push":{
"comments":{
"name":"yang",
"email":"ss@gmail.com",
"content":"nice two"
}
}
}
)

db.blog.posts.findOne()
"_id" : ObjectId("52cf9f70cae129f46ff6fa5d"),
"author" : {
"mail" : "hello@gmail.com",
"name" : "joe zhu"
},
"comments" : [
{
"name" : "zhu",
"email" : "zzzzzz5530041@gmail.com",
"content" : "nice one"
},
{
"name" : "yang",
"email" : "ss@gmail.com",
"content" : "nice two"
}
],
"content" : "this is content",
"title" : "java test"

使用$addToSet添加新的数组元素
db.blog.posts.update(
{
"author.mail":"hello@gmail.com"
},
{
"$addToSet":{
"comments":{
"name":"yang1",
"email":"ss@hot.com",
"content":"nice 3"
}
}
}
)

使用$addToSet和$each添加多个元素
db.user.update(
{
"_id":ObjectId("52cf9c6dcae129f46ff6fa5c")
},
{
"$addToSet":{
"favoritebook":{
"$each":[
"javascript",
"mongo in action"
]
}
}
}
)
//有几个从数组中删除元素的方法,如果把数组看作是一个栈或者队列.可以用$pop ,这个修改器可以从数组任何一端进行删除{$pop:{key:1}}从数组末端删除1个元素,{$pop:{key:-1}}从数组头删除1个元素
db.lists.insert(
{
"todo":[
"dishes",
"laundry",
"dry cleaning"
]
}
)
db.lists.update(
{
"_id":ObjectId("52cfac11cae129f46ff6fa5f")
},
{
"$pop":{
"todo":-1
}
}
)
//有时基于特定条件来进行删除,而不是依据位置,"$pull"可以做到
db.lists.update(
{
"_id":ObjectId("52cfad13cae129f46ff6fa60")
},
{
"$pull":{
"todo":"laundry"
}
}
)
//数组的定位修改器
//若是数数组有多个值,而我们只想对其中一部分做修改.通过位置或者定位操作符$
//数组都是从0开始的,我们可以通过下表进行访问元素
> db.blog.posts.findOne()
{
"_id" : ObjectId("52cfae34cae129f46ff6fa61"),
"author" : {
"name" : "sb",
"mail" : "hello@gmail.com"
},
"comments" : [
{
"name" : "yang",
"email" : "ss@gmail.com",
"content" : "nice two",
"vote" : 5
},
{
"name" : "yang1",
"email" : "ss@gmail.com",
"content" : "nice 1",
"vote" : 6
}
],
"content" : "this is content",
"title" : "java test"
}
//如果想要增加其中一个元素的投票数
db.blog.posts.update(
{
"_id":ObjectId("52cfae34cae129f46ff6fa61")
},
{
"$inc":{//这里的$inc用来做增加,也就是说vote数量将会在原有基础上增加100
"comments.0.vote":100//comments.0第1个元素
}
}
)
//但是在很多情况下我们并不知道每一个元素的下标,这样就不能通过位置来操作, 而是用$来操作
db.blog.posts.update(
{
"comments.name":"yang" //若有多个匹配,则只会操作一个
},
{
"$set":{//直接设值
"comments.$.vote":300
}
}
)

//upsert 是一种特殊的更新方式,如果没文档符合更新条件,那么就会以这个条件和更新数据创建一个新的文档
db.user.update(
{
"edu":"gaozhong"//文档中没有edu==gaozhong
},
{
"$set":{
"age":100
}
},
true//true表名这是一个upsert方式的更新
)
db.user.find()
{ "_id" : ObjectId("52cfb32dedd18a0edc7db7b0"), "age" : 100, "edu" : "gaozhong" }

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-308472-1-1.html 上篇帖子: mongo简介——驱动与第三方支持 下篇帖子: 查看mongo数据库的慢查询
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表