【有书共读】MongoDB实战第二版第二章

通过Javascript shell操作MongoDB

macOs 安装MongoDB

1.更新 Homebrew的package数据库(macosx上的软件包管理工具)

$ brew update

2.安装MongoDb

$ brew install mongodb

3.启动MongoDb

$ brew services start mongodb

4.连接到mongo

$ mongo

5.关闭MongoDb

$ brew services stop mongodb

如果安装过程遇到如下错误

Error: An unexpected error occurred during the `brew link` step
The formula built, but is not symlinked into /usr/local
Permission denied @ dir_s_mkdir - /usr/local/Frameworks
Error: Permission denied @ dir_s_mkdir - /usr/local/Frameworks

执行以下命令

sudo chown -R $(whoami) $(brew --prefix)/*
sudo install -d -o $(whoami) -g admin /usr/local/Frameworks

数据库,集合和文档

mongoDB把数据储存在文档中,数据可以以Json的格式输出。我们可以在不同的地方储存不同的文档,如文档usrs 和orders,一些文档以某种方式分类,成为集合,我们把集合储存在不同的数据库中。

切换数据库

> use tutorial
switched to db tutorial

创建第一个文档,因为使用javascript shell,文档使用JSON

> {username: "smith"}
smith

插入和查询

插入文档需要指定插入的集合,我们选择users集合

> db.users.insert({username: "smith"})
WriteResult({ "nInserted" : 1 })

如果插入成功,就成功保存了第一个文档

> db.users.find()
{ "_id" : ObjectId("5c00fba91fa39c550ae90b8d"), "username" : "smith" }

_id是文档的主键

继续插入

> db.users.insert({username: "john"})
WriteResult({ "nInserted" : 1 })
> db.users.count()
2
> db.users.find()
{ "_id" : ObjectId("5c00fba91fa39c550ae90b8d"), "username" : "smith" }
{ "_id" : ObjectId("5c00fc831fa39c550ae90b8e"), "username" : "john" }
> db.users.find({username: "john"})
{ "_id" : ObjectId("5c00fc831fa39c550ae90b8e"), "username" : "john" }

可以多个条件查询

> db.users.find({ "_id" : ObjectId("5c00fc831fa39c550ae90b8e"), "username" : "john" })
{ "_id" : ObjectId("5c00fc831fa39c550ae90b8e"), "username" : "john" }

等价于使用$and

> db.users.find({$and: [{"_id" : ObjectId("5c00fc831fa39c550ae90b8e")}, {"username" : "john"}]})

{ "_id" : ObjectId("5c00fc831fa39c550ae90b8e"), "username" : "john" }

也可以使用$or来进行或查询

> db.users.find({$or: [{"username" : "smith"}, {"username" : "john"}]})
{ "_id" : ObjectId("5c00fba91fa39c550ae90b8d"), "username" : "smith" }
{ "_id" : ObjectId("5c00fc831fa39c550ae90b8e"), "username" : "john" }

更新

指定文档,指定更新内容。注意使用$set,表示是更新当前文档

> db.users.update({username:"smith"},{$set: {country: "usa"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

想要删除country,使用$unset

> db.users.update({username:"smith"},{$unset: {country: 1}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.users.update({username:"smith"},{$set: {favorites:{movies: ["movie1", "movie2"]}}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.users.find({username:"smith"}).pretty()
{
    "_id" : ObjectId("5c00fba91fa39c550ae90b8d"),
    "username" : "smith",
    "country" : "usa",
    "favorites" : {
        "movies" : [
            "movie1",
            "movie2"
        ]
    }
}

删除

> db.users.remove({username:"smith"})
WriteResult({ "nRemoved" : 1 })

删除整个文档用drop

#MongoDB#
全部评论

相关推荐

vegetable_more_exercise:1-1.5万,没错啊,最少是1人民币,在区间内
点赞 评论 收藏
分享
秋招进行到现在终于能写总结了。完全没想到战线会拉这么长,过程会如此狼狈,不过更应该怪自己太菜了。好在所有的运气都用在了最后,也是有个去处。背景:双2本硕科班,无竞赛,本科一段研究所实习,硕士一段大厂暑期实习但无转正。技术栈是C++ & Golang,实习是客户端音视频(而且是鸿蒙端开发),简历两个C++项目一个Golang项目。主要投递岗位:后端,cpp软开,游戏服务端,测开,以及一些不拘泥于Java的岗位。从8月起总共投递123家公司,笔试数不清了,约面大约30家。offer/oc/意向:友塔游戏(第一个offer,面试体验很好,就是给钱好少南瑞继保(计算机科班点击就送(限男生),不...
乡土丁真真:佬很厉害,羡慕~虽然我还没有到校招的时候,也想讲一下自己的看法:我觉得不是CPP的问题,佬的背书双2,技术栈加了GO,有两段实习。投了123,面了30.拿到11个offer。这个数据已经很耀眼了。这不也是CPP带来的吗?当然也不止是CPP。至少来说在这个方向努力过的也会有好的结果和选择。同等学历和项目选java就会有更好的吗?我个人持疑问态度。当然CPP在方向选择上确实让人头大,但是我觉得能上岸,至于最后做什么方向,在我看来并不重要。至于CPP特殊,有岗位方向的随机性,java不是不挑方向,只是没得选而已。也希望自己以后校招的时候能offer满满
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务