XXXX

George

24-09-22

24-09-16

| 浏览量:👀  |  返回 <我想找工作>

安装 MongoDB

由于本机用了另一个 admin 用户安装了一些程序,所以用当前用户安装 brew install mongodb-atlas 不成功。就决定在本地安装 MongoDB。

从 MongoDB 官网下载安装包。网址:https://www.mongodb.com/try/download/community,相关版本信息:Version - 8.0.0(current), Platform - macOS x64, Package - tgz。

下载完成后,执行解压缩:~/mongodb8 % tar -xvf mongodb-macos-x86_64-8.0.0.tgz

在 MongoDB 5.xx 以后,安装包中就没有 mongo(就是 MongoDB Shell),于是无法用命令行方式操作 MongoDB。从https://www.mongodb.com/try/download/shell 下载 zip 包,解压后执行 mongosh 即可

安装数据库工具:https://www.mongodb.com/docs/database-tools/installation/installation-macos/ mongod --dbpath /usr/local/var/mongodb --logpath /usr/local/var/log/mongodb/mongo.log --fork mongod --dbpath ~/mongodb8/data --logpath ~/mongodb8/log/mongo.log --fork --dbpath 设置数据存放目录 --logpath 设置日志存放目录 --fork 在后台运行

数据库设计

《财富》世界500强排行榜

collection: glb500_yr23

rank: 排名
name: 公司名称。榜单上的公司名称。
revenue: 榜单上写的营业收入。单位:百万美元。
profit:榜单上写的例如。单位:百万美元。
country:公司所属国家。
name_fr:组织的正式/注册名称。比如中国移动的名称应该是中国移动通信集团有限公司,而不是中国移动通信集团公司(虽然2017年之前叫这个名字)

mongoimport -d remai -c glb500_yr2023 --type=csv --headerline ~/mongodb8/inf-data/glb500-yr2023.csv

毕业生去向信息

collection:student_gy23
2023年毕业的学生

sid:学号。
name: 姓名。
//gender: 性别。
major:专业。
path_after_graduate:毕业后的去向。比如升学、签三方协议入职,等等。
organization:雇佣单位。
type_org:雇佣单位的性质。比如国企。
industry_org:雇佣单位所属行业。
location_org:雇佣单位所在地。比如xx省xx市xx区。
position_type:入职岗位的类别。
degree: bachelor / master / doctor
path_fr: 去向的规整名称,根据 path_after_graduate 取值得到。比如:

mongoimport -d remai -c student_gy23 --type=csv --headerline ~/mongodb8/inf-data/student-gy23.csv

{ "degree": "bachelor-23", "path_type": "got-job" }

组织信息

collection: organization
(组织的信息)

sn:序号。唯一。采用36进制。
name_fr:组织的名称,正式/注册的名称。
name_aka:组织的简称/俗称。比如中国移动通信集团,通常叫做中国移动。
category: 组织的分类。比如政府机关、事业单位、企业、其他,等。
hierarchy_psn:上级组织的序号。
h_comments: 层级关系的相关证据。

mongoimport -d remai -c organization --type=csv --headerline ~/mdb8/inf-data/organization.csv



数据库操作

以下以 MongoDB Compass v1.45.2 为例。

1、删除文档document的字段field,用 update 之 $unset

比如删除 db = remai, collection = student_y2023 中的 major 字段。

(1)链接数据库后,在界面左侧选择对应的 collection。
(2)然后在 document tab中,点击 update 按钮。
(3)在出现的界面的 update 框输入如下信息,就可以了。


{
    $unset: {
        major: ""
    }
}
            

2、增加字段A,用 aggregate 之 $addFields。

比如增加一个字段 usn,取值等于已有字段 sn。

(1) 链接数据库后,在界面左侧选择对应的 collection。
(2) 然后选择 Aggregation tab,点击 add Stage 按钮。
(3) 在出现的界面中,选择 $addFields,bing 输入如下信息,就可以了。


 /**
 * newField: The new field name.
 * expression: The new field expression.
 */
{
  usn: "$sn"
}

3、完全复制集合A到集合B,可以使用 aggregate 之 $match $out

比如复制集合 list_soe 到 bk_list_soe 做备份,则可以在 mongosh 中执行 db.list_soe.aggregate([{ $match: {} }, { $out: "bk_list_soe" }])

4、修改字段名,可以使用 updateMany 之 $rename

比如将字段名 sn 修改为 usn,则可以在 mongosh 中执行 db.bk_list_soe.updateMany({},{$rename:{"sn":"usn"}})

db.bk_list_soe.updateMany({},{$set:{"sn123":"$usn"}})

Python里面的 dict,是可变类型。即 dp = dict,对dp 的更改,会反映到 dict中。dp不是 dict的一个副本,而是引用,类似指针。
dict 作为参数传入函数,在函数中对 dict 做的修改,在函数返回后,也依然有效。

参考信息

Python Faker 生成数据库测试数据。(241227)