【有书共读】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#
全部评论

相关推荐

刚刷到字节跳动官方发的消息,确实被这波阵仗吓了一跳。在大家还在纠结今年行情是不是又“寒冬”的时候,字节直接甩出了史上规模最大的转正实习计划——ByteIntern。咱们直接看几个最硬的数,别被花里胡哨的宣传词绕晕了。首先是“量大”。全球招7000多人是什么概念?这几乎是把很多中型互联网公司的总人数都给招进来了。最关键的是,这次的资源分配非常精准:研发岗给了4800多个Offer,占比直接超过六成。说白了,字节今年还是要死磕技术,尤其是产品和AI领域,这对于咱们写代码的同学来说,绝对是今年最厚的一块肥肉。其次是大家最关心的“转正率”。官方直接白纸黑字写了:整体转正率超过50%。这意味着只要你进去了,不划水、正常干,每两个人里就有一个能直接拿校招Offer。对于2027届(2026年9月到2027年8月毕业)的同学来说,这不仅是实习,这简直就是通往大厂的快捷通道。不过,我也得泼盆冷水。坑位多,不代表门槛低。字节的实习面试出了名的爱考算法和工程实操,尤其是今年重点倾斜AI方向,如果你简历里有和AI相关的项目,优势还是有的。而且,转正率50%也意味着剩下那50%的人是陪跑的,进去之后的考核压力肯定不小。一句话总结: 27届的兄弟们,别犹豫了。今年字节这是铁了心要抢提前批的人才,现在投递就是占坑。与其等到明年秋招去千军万马挤独木桥,不如现在进去先占个工位,把转正名额攥在手里。
喵_coding:别逗了 50%转正率 仔细想想 就是转正与不转正
字节7000实习来了,你...
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务