Asynchronous query execution
The following code example shows you how to send an asynchronous MongoDB aggregation query but save the result in Excel with vb .
Make sure to set your authorization credentials and if necessary the appropriate proxy settings.
For the basic authentication, use the credentials of the API user. To create an API user, refer to Creating an API user or Creating an API user via API.
We recommend you to use preemptive authentication. That way, the basic authentication request is sent before the server returns an unauthorized response. Also refer to the Apache documentation.
Sub ImportCSVFile(filepath As String) ''' <summary> ''' Read and CSVFile in Excel-sheet. ''' </summary> ''' <value>The path of the CSVFile</value> Dim line As String Dim arrayOfElements Dim linenumber As Integer Dim elementNumber As Integer Dim element As Variant linenumber = 0 elementNumber = 0 Open filepath For Input As #1 ' Open file for input Do While Not EOF(1) ' Loop until end of file linenumber = linenumber + 1 Line Input #1, line arrayOfElements = Split(line, ";") elementNumber = 0 For Each element In arrayOfElements elementNumber = elementNumber + 1 Cells(linenumber, elementNumber).Value = element Next Loop Close #1 ' Close file.End SubPublic WithEvents newButton As Windows.Forms.ButtonSub AsyncMongoRequest() ''' <summary> ''' Set header, basic authentication and proxy for the WinHttpRequest. ''' Save the HTTPRequest response as csvFile. ''' Read the csvFile in Excel-sheet. ''' Requirement: ''' JsonConverter See: (https://github.com/VBA-tools/VBA-JSON) ''' TODO handle catch and exception ''' </summary> Dim strResult As String Dim query As String Dim objHTTP As Object Dim url As String Dim Json As Object Dim status As String Dim postId As String Dim proxyServer As String Dim basicAuth As String Dim ntUser As String Dim ntPassword As String Dim fso As Object Dim oFile As Object server = "https://bosch-iot-insights.com" serviceBaseUrl = "/mongodb-query-service/v2/<your_project>" Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1") query = "{""collection"": ""<your_project>_processed_data"", ""query"": [{""$limit"":10}]}" proxyServer = "rb-proxy-de.bosch.com:8080" ' If you are inside your company network, a proxy authentication may be required. Otherwise, you can remove this from the example. This is an example for a Bosch internal proxy. basicAuth = "Basic " & "<your basic authentication string>" ntUser = "<username>" ntPassword = "<password>" url = server & serviceBaseUrl objHTTP.Open "POST", url & "/submit-aggregation-query", False objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" objHTTP.setRequestHeader "Content-type", "application/json" objHTTP.setRequestHeader "Authorization", basicAuth objHTTP.setRequestHeader "Connection", "Keep-Alive" objHTTP.setProxy 2, proxyServer, "" objHTTP.SetCredentials ntPassword, ntPassword, 1 objHTTP.send query strResult = objHTTP.responseText Set Json = JsonConverter.ParseJson(strResult) postId = Json("queryId") url = url & "/queries/" & postId objHTTP.Open "GET", url, False objHTTP.send strResult = objHTTP.responseText status = objHTTP.status Set Json = JsonConverter.ParseJson(strResult) status = Json("status") If status = "SUCCESSFUL" Then url = url & "/result?format=text%2Fvnd.insights.excel.de%2Bcsv" objHTTP.Open "GET", url, False objHTTP.send strResult = objHTTP.responseText Set fso = CreateObject("Scripting.FileSystemObject") Set oFile = fso.CreateTextFile("filepath://where you want to store the response") oFile.WriteLine strResult oFile.Close Close ImportCSVFile "filepath://where your response is stored" Else MsgBox "Error in data processing on the server: " & strResult & status End IfEnd SubPrivate Sub Form1_Load() Handles Me.Load ''' <summary> ''' Create insightsDownloadButton and ''' append AsyncMongoRequest sub function to the button ''' </summary> newButton = New Windows.Forms.Button newButton.Name = "insightsDownloadButton" & i newButton.Top = 20 * 30 newButton.Left = 40 AddHandler newButton.Click, AddressOf RequestButton Me.Controls.Add(newButton)End Sub