学习 如何

构建一个命令行工具与斯威夫特和MongoDB188金宝搏手机客户端安卓下载

发布时间:2020年9月11日

  • 188金宝搏手机客户端安卓下载
  • 领域
  • 舆图
  • ...

通过迈克尔·林恩

分享

目录

介绍

建筑用裸手的东西给了像其他一些任务的满足感。但真的没有比较,当你创造的东西,不仅完成手头的紧迫任务,你得到的感觉,但也使您能够更有效地完成这一任务同样在将来。或者,甚至更好,如果别人可以使用你已经建立更轻松地完成任务。这就是我们今天要做。我们要构建的东西,会自动将数据导入的MongoDB的过程。188金宝搏手机客户端安卓下载

因为它的自包含的,运输的可执行程序是强大的。有没有要求编译或保证其他元素是存在于环境中。它只是运行。你可以与他人分享,并假设他们有一个相对类似的系统,它会只是运行对他们来说太。我们要着力抓好用斯威夫特,苹果的易于学习的编程语言我们的目标。我们还将特征利用我们全新的MongoDB雨燕驱动,使您能够创建,在MongoDB188金宝搏手机客户端安卓下载数据库读取,更新和删除数据。

TL; DR:

宁愿有一个视频驶过该内容的?退房YouTube视频在那里,我的同事尼克Raboy,和我聊过这个非常相同的内容。

目标

以下是这篇文章的目标。

  1. 增加与MongoDB的阿特拉斯的熟悉程度188金宝搏手机客户端安卓下载

通过这篇文章的结尾,如果我们见过我们的目标,你将能够做到以下几点:

  1. 使用Xcode中开始与斯威夫特试验
  2. 斯威夫特包管理器至:

    • 创建的基础工程。
    • 整合MongoDB的斯威夫特188金宝搏手机客户端安卓下载驱动程序到您的项目
    • 创建你的Mac上的exectuable。

先决条件

在我们开始之前,让我们澄清一些你必须有一个适当上手的东西。

Xcode的版本11.6

如果您还没有与太多的经验Xcode中或者MacOS应用程序开发,检查出的导苹果开发者中心。入门很容易,它是免费的!

我们会怎样建立?

我试图自动化任务涉及数据导入到MongoDB数据库。188金宝搏手机客户端安卓下载之前我们得到太远创建解决方案的路径,让我们记录我们的什么,我们将创建要求设定。

从CSV到MongoDB188金宝搏手机客户端安卓下载的

步骤概述

下面是我们的工作来完成我们的任务步骤快速破败。

  1. 启动阿特拉斯集群。
  2. 添加数据库用户名/密码,和网络进入异常,因此您可以从您的IP地址访问你的数据库。
  3. 创建使用斯威夫特包管理器斯威夫特项目( 迅速包INIT --type =可执行
  4. 生成使用斯威夫特包管理器的Xcode项目(迅速包生成-xcodeproj
  5. 创建一个 (for循环),使用()访问,并打印出的数据在你的example.csv文件。(看到csvread.swift
  6. 修改你的包在MongoDB的斯威夫特司机靠边停车。188金宝搏手机客户端安卓下载(看到Package.swift
  7. 测试。(迅速建立;迅速跑)错误?请参阅下面的常见问题。
  8. 修改代码以纳入MongoDB的斯威夫特驱动程序,并写入文件。188金宝搏手机客户端安卓下载(看到来源/命令行的SWIFT的MongoDB / main188金宝搏手机客户端安卓下载.swift
  9. 测试。(迅速建立;迅速跑)错误?请参阅下面的常见问题。
  10. 创建可执行文件和释放。(迅速释放包

对于解决方案的要求

  1. 该解决方案必须导入一组数据即开始在CSV(或表格/ Excel文件)格式到现有的MongoDB数据库。188金宝搏手机客户端安卓下载
  2. 在CSV文件中的每一行数据应该成为的MongoDB数据库一个单独的文件188金宝搏手机客户端安卓下载。此外,每一个新的文件应该包括与进口日期/时间的新领域。
  3. 必须使用MongoDB中的最小的知识来完成188金宝搏手机客户端安卓下载- 即具有的MongoDB相对较少的经验和知识,应该有人能够在几分钟内执行任务。188金宝搏手机客户端安卓下载

我们可以简单地使用mongoimport使用以下命令行:

              
1
mongoimport --host本地主机:27017 -类型CSV --db学校--collection学生--file example.csv --headerline

如果你熟悉MongoDB中,上面的命令行不会看起188金宝搏手机客户端安卓下载来都非常棘手。然而,这不能满足我们的,原因如下要求:

  • 要求:1:通行证 - 这将导致数据导入到MongoDB的。188金宝搏手机客户端安卓下载
  • 要求2:失败 - 而每一行会成为一个单独的文件,我们将无法获得这些文件中我们更多的日期字段。
  • 要求3:失败 - 尽管这里的语法似乎是,如果你以前使用过的MongoDB而直线前进,以一个新人,也可以是一个有点混乱。188金宝搏手机客户端安卓下载例如,我使用本地主机在这里......当我们在另一台主机上运行此可执行文件,我们就需要更换,为我们的MongoDB数据库的实际主机名。188金宝搏手机客户端安卓下载该命令的语法会得到相当多的复杂一旦发生这种情况。

那么,我们将如何打造一些符合我们的所有要求?

我们可以构建一个使用MongoDB的斯威夫特驱动程序来完成任务的命令行可执行文件。188金宝搏手机客户端安卓下载建立一个程序来完成我们的任务,使我们能够与我们的任务有关的复杂的抽象得多。幸运的是,对于斯威夫特驱动程序,并使用它来读取CSV数据,操纵它,并把它写入MongoDB数据库确实是直线前进。188金宝搏手机客户端安卓下载

CSV到Mon188金宝搏手机客户端安卓下载goDB的

在启动阿特拉斯你的数据库集群

你需要创建一个新的集群,并用样本数据加载它。我的同事马克西姆伯涅创造了一个视频教程来帮助你,但我也解释下面的步骤:

  • 请点击“开始免费”在MongoD188金宝搏手机客户端安卓下载B的主页。
  • 输入您的详细信息,或者只是注册与您的谷歌帐户,如果你有一个。
  • 接受服务条款
  • 创建一个起动机簇。

    • 选择云服务提供商,你想存储你的MongoDB数据库188金宝搏手机客户端安卓下载
    • 挑选一个有意义的您的区域。
    • 如果你喜欢,你可以改变集群的名称。我打电话给我的“MyFirstCluster”。

一旦你的集群启动,要确保你添加网络异常条目您当前的IP,然后添加数据库的用户名和密码。记下用户名和密码 - 你需要这些邮件。

设置项目

我们将通过创建一个斯威夫特包开始我们的旅程斯威夫特包管理器。这个工具会给我们一个模板项目,并建立目录结构和一些脚手架我们需要开始。我们将使用带有迅速命令行工具子命令。

有几个变化,我们可以使用。在跳之前,让我们例如在一些标志的差异。

              
1
SWIFT包初始化

这个最基本的变化会给我们一个通用的项目。但是,因为我们正在构建一个MacOS的,可执行的,让我们加入- 类型标志,以指示项目,我们正在处理的类型。

              
1
SWIFT包初始化 -类型=可执行文件

这将创建定义构建的“产品”项目 - 这是在我们的essense执行。只要记住,如果你正在创建一个可执行文件,通常用于服务器端斯威夫特,你要纳入--type =可执行旗。

Xcode是大多数iOS和苹果开发者一般,编写和维护的代码,以便让我们准备一个项目,所以我们可以使用Xcode的了。现在我们已经得到了我们的到位基础工程脚手架,让我们创建一个Xcode项目,我们可以修改我们的代码。

要创建一个Xcode项目只需执行以下命令:

              
1
迅速包生成-xcodeproj

然后,我们可以打开.xcproject文件。你的Mac应该自动打开了Xcode作为试图打开一个Xcode项目文件的结果。

              
1
打开<项目名称> .xcodeproj /#更改为这是由以前的命令创建的名称。

纵观我们的数据

凭借我们在地方项目中的脚手架,让我们把重点我们将与我们的可执行文件来操作数据。让我们看一下第一个原始数据。比方说,有每个月,我需要进入我的数据库中出来的学生名单。它可能是这个样子:

              
1
2
3
4
6
7
8
9
10
11
12
名字,姓氏,分配迈克尔,基本,FALSE丹,Acquilone,FALSE礼,齐默尔曼,FALSE利亚姆,泰勒,FALSE简,阿尔贝茨,FALSE特德·威廉斯,FALSE苏茜,兰福德,FALSE琳娜,斯特恩,FALSE贾里德,伦茨,FALSE六月,吉福德,FALSE威尔玛,阿特金森,FALSE

在这个例子中的数据,我们对信息的3个基本字段:姓,名,以及指示学生是否已经被分配给特定类别的布尔值。

我们希望得到这个数据,从它的当前形式(CSV)到数据库内,沿途文件,添加一个字段来记录文档导入的日期。这将要求我们阅读我们的斯威夫特应用程序内的CSV文件。在开始之前,请确保您可能已到,你知道路径的文件类似的数据。我们将创建一些代码旁访问,与斯威夫特文件。

一旦我们完成后,数据会看起来像下面,JSON文件中表示:

              
1
2
3
4
6
7
8
9
10
11
{“_ID”:{“$ OID”“5f491a3bf983e96173253352”//这将来自于我们的驱动程序。},“名字”“迈克尔”“姓”“基本”“日期”:{“$日期”“2020-08-28T14:52:43.398Z”//这将由我们的结构默认值设定},“分配”}

为了得到名称的行和字段到MongoDB中,我们将使用雨燕的内置188金宝搏手机客户端安卓下载类。这是个强大的工具,可以做一切从读取文件的内容进行插值内置变量和两组或多组串之间做比较。类方法contentsOfFileString类的访问将基于我们提供了一个文件路径的文件,打开文件,使我们能够访问其内容。这是我们的代码可能是什么样子,如果我们只是通过CSV文件将循环,并打印出它包含的行。

你可能受到诱惑,只是复制/粘贴下面的代码。我建议你在手动键入它......从屏幕上阅读。这将使你体验到自动更正的功率和代码提示里面的Xcode。此外,一定要修改的值路径变量指向哪里你把你的位置example.csv文件。

              
1
2
3
4
6
7
8
9
10
11
12
进口基础路径=“/Users/mlynn/Desktop/example.csv”//更改为您的CSV文件的路径{内容=尝试(contentsOfFile:路径,编码:.utf8)行= contents.components(separatedBy:NSCharacterSet.newlines)对于行{如果行!=“”{打印“行了:\(行)”)}}}

让我们来看看这里发生了什么。

  • 1号线:我们将用基金核心库。这让我们了解一些基本的字符串,字符和比较方法。该进口报关使我们能够访问本地,以及第三方库和模块。
  • 3号线:​​硬代码路径变量的CSV文件。
  • 第6-7行:使用字符串方法访问的CSV文件的内容。
  • 8号线:遍历我们的文件每一行和显示内容。

要运行这个简单的例子,让我们打开main.swift文件,我们的命令SWIFT包初始化为我们创造。编辑这个文件,在Xcode中,首先,让我们打开main.swift文件,我们的命令SWIFT包初始化为我们创造。编辑这个文件,在Xcode,穿越工程 - 下的文件夹树>来源,项目名称......和开放main.swift。更换简单你好,世界与上面的代码。

运行这个对我们example.csv文件,你应该看到类似以下的输出。我们将使用命令迅速构建迅速跑

CSV到Mon188金宝搏手机客户端安卓下载goDB的

集成MongoDB的斯威夫特驱动188金宝搏手机客户端安卓下载程序

有了这个基本结构,我们现在可以开始整合所需的代码将文档插入到我们的CSV文件的每一行数据的数据库。让我们通过配置斯威夫特包管理器集成MongoDB的雨燕驱动程序启动。188金宝搏手机客户端安卓下载

Package.swift文件

导航在项目资源管理器找文件Package.swift。从Package.swift文件替换内容回购协议

              
1
2
3
4
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//快捷工具版本:5.2//雨燕工具版本声明雨燕的最低版本需要建立这个包。进口PackageDescription包=( 名称:“csvimport-雨燕”,平台:[.macOS(.v10_15),],依赖关系:[。包装(URL:“https://github.com/188金宝搏手机客户端安卓下载mongodb/mongo-swift-driver.git”来自:“1.0.1”)],目标:[.TARGET(名称:“csvimport-雨燕”,依赖关系:[。产品(名称:“MongoSwiftSync”,包装:“蒙戈 - 迅速司机”)]),.testTarget(名称:“csvimport-swiftTests”,依赖关系:“csvimport-雨燕”]),])

如果你不熟悉斯威夫特包管理器走了弯路,并宣读了在这里

我们包括告诉斯威夫特包管理器,我们正在建立这个可执行的一组特定的MacOS版本的说法。

              
1
2
3
平台:[.macOS(.v10_15)]

提示:如果你离开这个说法了,你会得到一个消息,说明该包的目的是为MacOS 10.10或类似的待建。

接下来,我们已经包含在套餐引用我们需要在我们的软件,以插入和操纵MongoDB的数据。1888bet亚洲体育188金宝慱官网下载188金宝搏手机客户端安卓下载在这个例子中,我们将集中于一个异步执行。也就是说,蒙戈 - 迅速驱动器

现在,我们已经包括我们的依赖,让我们构建的项目。构建项目常常让你赶上你可能无意中早期引入的任何误差。

              
1
SWIFT包材

你应该得到类似如下的回应:

              
1
[3/3]链接CMD

现在让我们修改我们的基本计划项目,利用我们的MongoDB驱动程序。188金宝搏手机客户端安卓下载

              
1
2
3
4
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
三十
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
进口基础进口MongoSwiftSyncVARmurl:=“188金宝搏手机客户端安卓下载mongodb的+ SRV:// <用户名>:\(ProcessInfo.processInfo.environment [”通过“]!)@ myfirstcluster.zbcul188金宝搏手机客户端安卓下载.mongodb.net/?retryWrites=true&w=majority”客户端=尝试MongoClient(murl)分贝= client.db(“学生们”会话= client.startSession(选项:ClientSessionOptions(causalConsistency:真正))结构可编码{名字:姓:日期:日期=日期()分配:布尔_ID:BSONObjectID}路径=“/Users/mlynn/Desktop/example.csv”VARtempAssigned:布尔VAR计数诠释=0VAR标题:布尔=真正personCollection = db.collection(“人”,withType:{内容=尝试(contentsOfFile:路径,编码:.utf8)行= contents.components(separatedBy:NSCharacterSet.newlines)对于行{如果行!=“”{VAR值:] = []值= row.components(separatedBy:“”如果标题==真正{头=}其他{如果(值[2])。小写()==“假”||布尔(值[2])=={tempAssigned =}其他{tempAssigned =真正}尝试personCollection.insertOne((名字:值[0],姓氏:值[1],被分配:tempAssigned,_id:BSONObjectID()),会话:会话)计数+ =1打印“插入:\(计数)\(行)”)}}}}

2个线进口我们需要的驱动程序(蒙戈 - SWIFT)。

接下来,我们配置的驱动程序。

              
1
2
3
4
VARmurl:=“188金宝搏手机客户端安卓下载mongodb的+ SRV:// <用户名>:\(ProcessInfo.processInfo.environment [”通过“]!)@ myfirstcluster.zbcul188金宝搏手机客户端安卓下载.mongodb.net/?retryWrites=true&w=majority”客户端=尝试MongoClient(murl)分贝= client.db(“学生们”会话= client.startSession(选项:ClientSessionOptions(causalConsistency:真正))

记得替换<用户名>与用户在你创建的图册。

读取并和MongoDB的斯威夫特中写入数据,我们需要利用可编码结构。188金宝搏手机客户端安卓下载Codeables斯威夫特是一个惊人的特点,编写代码,将数据写入MongoDB中肯定有帮助。188金宝搏手机客户端安卓下载Codables实际上是两个协议的别名:可编码解码。当我们把我们的结构符合可编码协议,我们能够为我们的字符串数据编码成JSON,然后回解码成简单结构运用JSONEncoderJSONDecoder分别。我们需要这样的结构,因为在MongoDB中用于存储数据的格式稍有不同的是,表示你看到斯威夫特的数据结构。188金宝搏手机客户端安卓下载我们将创建一个结构来描述我们的文档模式应该是什么样子的MongoDB里面。188金宝搏手机客户端安卓下载下面是我们的模式结构应该是这样的:

              
1
2
3
4
6
结构可编码{码:分配:布尔日期:日期=日期()_ID:BSONObjectID}

请注意,我们已经得到了所有从我们的CSV文件中加上日期字段的元素。

我们还需要一些临时变量,当我们处理这些数据,我们将使用。计数和一个特殊的临时变量,当我确定学生是否被分到一个班或不我会用...tempAssigned。最后,在这个代码块中,我创建了一个变量来存储在文件中的位置的状态。将被设置为true最初是因为我们想跳过数据的第一行。这就是列标题居住的地方。

              
1
2
3
4
路径=“/Users/mlynn/Desktop/example.csv”VARtempAssigned:布尔VAR计数诠释=0VAR标题:布尔=真正

现在,我们可以创造我们的MongoDB数据库,我们将用它来存储我们的学生数据集合的引用。188金宝搏手机客户端安卓下载由于缺乏一个更好的名字,我打电话矿personCollection。另外注意,我们提供一个链接回我们结构使用withType参数的收集方法。这确保了驾驶员知道什么类型的数据,我们正在处理。

              
1
personCollection = db.collection(“人”,withType:

接下来的代码位是我们的任务的心脏。我们通过各行要循环,并创建一个文档。我的评论和解释每一行内联。

              
1
2
3
4
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
内容=尝试(contentsOfFile:路径,编码:.utf8)//让我们用字符串CSV文件的内容内置行= contents.components(separatedBy:NSCharacterSet.newlines)//获取各行相隔换行符对于行{//遍历文件中的所有行。如果行!=“”{//如果我们有一个空行...跳过它。VAR值:] = []//创建/复位型串的值阵列 - 至零。值= row.components(separatedBy:“”//分配值阵列的字段的数据的行中如果标题==真正{//如果是第一行...跳过它,。标题=//设置页眉为假,所以我们这样做只是一次。}其他{如果(值[2])。小写()==“假”||布尔(值[2])=={tempAssigned =//上图:如果字符串或布尔值false,就这样吧}其他{tempAssigned =真正//否则,明确其设置为true}尝试personCollection.insertOne((名字:值[0],姓氏:值[1],被分配:tempAssigned,_id:BSONObjectID()),会话:会话)计数+ =1//上图:使用集合类形式的insertOne方法打印“插入:\(计数)\(行)”//蒙戈 - 迅速驱动器和创建与人``Struct``文档。}}}

结论

导入数据是一种常见的挑战。更常见的是,当我们希望自动插入,或用MongoDB的处理数据的任务。188金宝搏手机客户端安卓下载在这如何,我已经解释了如何开始使用斯威夫特,完成创建可执行文件,命令行工具,您可以与同事共享,使他们能够导入数据为您简化数据导入的任务。虽然这个例子是在它如何解决眼前的问题而言很简单,你当然可以采取下一步行动,并开始构建这个来支持命令行参数,甚至用它不仅可以插入数据,还可以删除,和合并或更新数据。

我已经准备了部分以下标题故障排除如果你遇到的一些常见错误。我已经尽我所能想到的所有的你可能会发现通常的问题。但是,如果你发现另一个问题,请让我知道。要做到这一点,最好的方法是订阅MongoDB的社区188金宝搏手机客户端安卓下载并且一定要访问节驱动程序和ODM

资源

故障排除

使用本节来帮助解决一些常见问题。如果您仍然有阅读这些常见的解决方案后的问题,请访问我的188金宝搏手机客户端安卓下载MongoDB的社区

没有这样的模块

斯威夫特错误:没有这样的模块

出现这种情况时,斯威夫特无法建立蒙戈 - 迅速驱动器模块。这最通常发生时,开发者正在尝试使用Xcode中并没有规定最低目标操作系统版本。查看附加的图像,并注意点击的顺序去相应的设置。更改,设置到10.15以上。

斯威夫特错误没有这样的模块

有关

在宣布MongoDB的斯威夫特188金宝搏手机客户端安卓下载驱动程序
建立一个命令行工具与斯威夫特和MongoDB - 视频188金宝搏手机客户端安卓下载
188金宝搏手机客户端安卓下载MongoDB的图标
  • 开发者中心
  • 文档
  • 大学
  • 社区论坛

©M188金宝搏手机客户端安卓下载188博金宝app网站ongoDB的公司