gpt4 book ai didi

excel - 如何从 Excel 连接 Mongodb

转载 作者:IT老高 更新时间:2023-10-28 13:06:58 25 4
gpt4 key购买 nike

我想使用 excel 宏连接到 mongodb 数据库,有人知道如何完成这项任务吗?

最佳答案

Shell 方法

几乎所有与命令行接口(interface)的东西都可以通过 Shell 访问。

这是一个连接到正在运行的 MongoDB 实例并将查询打印到即时窗口的简单示例。您需要添加对 Windows 脚本宿主对象模型的引用。

Private Sub Test()

Dim wsh As New WshShell
Dim proc As WshExec
Dim line As String

Set proc = wsh.Exec("mongo")

With proc
.StdIn.WriteLine "use test"
.StdIn.WriteLine "db.restaurants.find({""address.zipcode"":""10075""})"
.StdIn.WriteLine "quit()"

Do While .Status = WshRunning
line = .StdOut.ReadLine
If line = "Type ""it"" for more" Then
.StdIn.WriteLine "it"
ElseIf line Like "{*" Then
Debug.Print line
End If
DoEvents
Loop
End With
End Sub

但是,仅打印原始 JSON 字符串并不是很令人兴奋或有用。您可以编写自己的 JSON 解析器,但在此示例中,我们将使用 Tim Hall 的 VBA-JSON(您可以 find it on GitHub)。

在撰写本文时,在使用 VBA-JSON 解析从 MongoDB 返回的字符串时,必须解决一个问题。任何包含括号的值,例如"_id": ObjectId("..."),会抛出错误。一个快速而肮脏的解决方法是使用 RegEx 来清理解析器的字符串。您需要引用 Microsoft VBScript Regular Expressions 5.5 库才能使以下函数起作用。

Private Function CleanString(str As String) As String

Dim temp As String
Dim rx As New RegExp

With rx
.IgnoreCase = True
.Global = True

.Pattern = "[a-z]*\(" ' Left
temp = .Replace(str, "")
.Pattern = "\)" ' Right
temp = .Replace(temp, "")
End With

CleanString = temp
End Function

然后我们可以解析从 MongoDB 返回的 JSON 并将每个对象添加到 Collection。访问这些值变得非常简单。

Private Sub Mongo()

Dim wsh As New WshShell
Dim proc As WshExec
Dim line As String
Dim response As New Collection
Dim json As Object

Set proc = wsh.Exec("mongo")

With proc
.StdIn.WriteLine "use test"
.StdIn.WriteLine "db.restaurants.find({""address.zipcode"":""10075""})"
.StdIn.WriteLine "quit()"

Do While .Status = WshRunning
line = .StdOut.ReadLine
If line = "Type ""it"" for more" Then
.StdIn.WriteLine "it"
ElseIf line Like "{*" Then
response.Add ParseJson(CleanString(line))
End If
DoEvents
Loop
End With

For Each json In response
Debug.Print json("name"), json("address")("street")
Next
End Sub

... 这将从 MongoDB Example Dataset 生成以下输出.

Nectar Coffee Shop          Madison Avenue
Viand Cafe Madison Avenue
Don Filippo Restaurant Lexington Avenue
Lusardi'S Restaurant Second Avenue
Due Third Avenue
Lenox Hill Grill/Pizza Lexington Avenue
Quatorze Bistro East 79 Street
Luke'S Bar & Grill Third Avenue
Starbucks Coffee Lexington Avenue
New York Jr. League East 80 Street
Doc Watsons 2 Avenue
Serafina Fabulous Pizza Madison Avenue
Canyon Road Grill 1 Avenue
Sushi Of Gari East 78 Street

陷阱

  • ReadLineWriteLine阻塞函数
  • Exec打开的窗口无法隐藏

上述两种方法的解决方法是使用双层方法,其中 VBA 使用 wsh.Run 调用隐藏脚本,然后运行 ​​Exec (以及与 proc 交互的任何其他代码)。这种方法的缺点是必须将 StdIn(以及某种程度上的 StdOut)写入文件。

关于excel - 如何从 Excel 连接 Mongodb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4008598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com