Connecting and getting data from a local MongoDB database
Moderators: FourthWorld, heatherlaine, Klaus, kevinmiller, robinmiller
Connecting and getting data from a local MongoDB database
Hi friends, can you give me a hand on how to connect to a Mongo database and how to read from it from within Rev? In a recent post I made, I asked something about revdb, in the understanding that it is being revised to support NoSQL databases. Incredibly enough, every day, while I learn a little bit more about this NoSQL thing, I tend to think less and less in terms of "Joins" Regards, Javier
Re: Connecting and getting data from a local MongoDB databas
Hi Javier,
"Support for NoSQL databases" isn't something you can add by making one big change in the LiveCode engine. Every database engine has its own way to provide its service and for each database system, a special driver or external needs to be created, unless the database uses a standard protocol like ODBC.
While such a driver or external is unavailable, you can probably use the shell function to communicate with the database. Although typing
in a terminal or command prompt would start mongo in a shell, but if you add the --eval parameter, you can execute the commands immediately, without entering the shell first:
Additionally, you can write a script and save it in a .js file, which is then executed with
or
You'll have to read the mongo documentation if you want to know what else the mongo command line utility can do.
To execute mongo shell commands in LiveCode, use the shell function, as in
Kind regards,
Mark
"Support for NoSQL databases" isn't something you can add by making one big change in the LiveCode engine. Every database engine has its own way to provide its service and for each database system, a special driver or external needs to be created, unless the database uses a standard protocol like ODBC.
While such a driver or external is unavailable, you can probably use the shell function to communicate with the database. Although typing
Code: Select all
mongo
Code: Select all
mongo --eval "printjson(db.serverStatus())"
Code: Select all
mongo yourFile.js
Code: Select all
mongo < yourFile.js
To execute mongo shell commands in LiveCode, use the shell function, as in
Code: Select all
put shell("mongo --eval" && quote & "printjson(db.serverStatus())" & quote)
Mark
The biggest LiveCode group on Facebook: https://www.facebook.com/groups/livecode.developers
The book "Programming LiveCode for the Real Beginner"! Get it here! http://tinyurl.com/book-livecode
The book "Programming LiveCode for the Real Beginner"! Get it here! http://tinyurl.com/book-livecode
Re: Connecting and getting data from a local MongoDB databas
Probably you can use the ODBC driver for MongoDB: http://blog.mongodb.org/post/4985203651 ... or-mongodb
So you can use Livecode with MogoDB as with any other database that uses ODBC connectivity protocol.
So you can use Livecode with MogoDB as with any other database that uses ODBC connectivity protocol.
Livecode Wiki: http://livecode.wikia.com
My blog: https://livecode-blogger.blogspot.com
To post code use this: http://tinyurl.com/ogp6d5w
My blog: https://livecode-blogger.blogspot.com
To post code use this: http://tinyurl.com/ogp6d5w
Re: Connecting and getting data from a local MongoDB databas
Thank you bery much Mark, so far I have been able to connect to my MongoDB. However when issuing a command to find document a:4 from test
I get:
MongoDB shell version: 2.2.7
connecting to: test
{
"_mongo" : connection to 127.0.0.1,
"_db" : test,
"_collection" : test.test,
"_ns" : "test.test",
"_query" : {
"a" : 4
},
"_fields" : null,
"_limit" : 0,
"_skip" : 0,
"_batchSize" : 0,
"_options" : 0,
"_cursor" : null,
"_numReturned" : 0,
"_special" : false,
"help" : function () ....
Instead of a document from the test db. The "same" command in the console executes OK.
Regards, Javier
I get:
MongoDB shell version: 2.2.7
connecting to: test
{
"_mongo" : connection to 127.0.0.1,
"_db" : test,
"_collection" : test.test,
"_ns" : "test.test",
"_query" : {
"a" : 4
},
"_fields" : null,
"_limit" : 0,
"_skip" : 0,
"_batchSize" : 0,
"_options" : 0,
"_cursor" : null,
"_numReturned" : 0,
"_special" : false,
"help" : function () ....
Instead of a document from the test db. The "same" command in the console executes OK.
Regards, Javier
Re: Connecting and getting data from a local MongoDB databas
MaxV, thank you, I'll try the ODBC connector, for what they say in the Github it's still in early stages of development.
Regards, Javier
Regards, Javier
Re: Connecting and getting data from a local MongoDB databas
Hi friends, first please excuse me for this lengthy post.
New to collections, documents etc. I have reached a point in which I cannot go any further, something bad considering the powerful tools I got at hands.
I have installed mongo in my PC and its running OK. I can interact with it, populating the test DB, and making some queries. In LC I have created a stack with:
One button that puts the received document into a field. I understand that I have to use DG to receive the data, but for now I am using a regular field.
One field “A” to receive the response from mongo
One field “B” to with the parsed string that I put in fld “A” -- You’ll see why I am doing this later.
The script for the button is:
on mouseup
set the hideConsoleWindows to true
put shell("C:\\mongodb\bin\mongo.exe --eval" && quote & "printjson(db.test.findOne())" & quote) into pJSON
--put shell("C:\\mongodb\bin\mongo.exe --eval" && quote & "printjson(db.test.find())" & quote) into pJSON
put pJSON into fld "a"
put offset("{",pJSON) into desde
put the length of pJSON into largo
put char desde to largo of pJSON into pJSON
put pJSON into fld "B"
put JSONToArray(pJSON) into tArray
put tArray["a"]
end mouseup
function JSONToArray pJSON
local tArray,tKeys
repeat for each line tKey in mergJSONDecode(pJSON,"tArray")
put JSONToArray(tArray[tKey]) into tArray[tKey]
end repeat
return tArray
end JSONToArray
Please take note on all the string manipulation I did to isolate the document from the response of the server, mouseup converts this:
MongoDB shell version: 2.2.7
connecting to: test
{ "_id" : ObjectId("52e3f87c8da8b1efb07004c9"), "a" : 1 }
To this:
{ "_id" : ObjectId("52e3f87c8da8b1efb07004c9"), "a" : 1 }
After I “parsed” the original response from the server I thought I produced a JSON, but validating it with an online service, I discovered that it really isn’t a JSON. That is why the function JSONToArray(pJSON) fails . I think this string manipulation is not needed and the problem is that I am doing something wrong retrieving data from the server.
What I described is one of the problems I found, the other happens when in the mouseup handler,
I replace:
put shell("C:\\mongodb\bin\mongo.exe --eval" && quote & "printjson(db.test.findOne())" & quote) into pJSON
With
put shell("C:\\mongodb\bin\mongo.exe --eval" && quote & "printjson(db.test.find())" & quote) into pJSON
This time fld “A” gets:
MongoDB shell version: 2.2.7
connecting to: test
{
_"_mongo" : connection to 127.0.0.1,
_"_db" : test,
_"_collection" : test.test,
_"_ns" : "test.test",
_"_query" : {
__
_},
_"_fields" : null,
_"_limit" : 0,
_"_skip" : 0,
_"_batchSize" : 0,
_"_options" : 0,
_"_cursor" : null,
_"_numReturned" : 0,
_"_special" : false,
_"help" : function () {
print("find() modifiers");
...
...
...
}
Seems printjson(db.test.find()) is returning some kind of description, instead of the documents test contains.
Any comments/suggestion will be appreciated,
Saludos, Javier
New to collections, documents etc. I have reached a point in which I cannot go any further, something bad considering the powerful tools I got at hands.
I have installed mongo in my PC and its running OK. I can interact with it, populating the test DB, and making some queries. In LC I have created a stack with:
One button that puts the received document into a field. I understand that I have to use DG to receive the data, but for now I am using a regular field.
One field “A” to receive the response from mongo
One field “B” to with the parsed string that I put in fld “A” -- You’ll see why I am doing this later.
The script for the button is:
on mouseup
set the hideConsoleWindows to true
put shell("C:\\mongodb\bin\mongo.exe --eval" && quote & "printjson(db.test.findOne())" & quote) into pJSON
--put shell("C:\\mongodb\bin\mongo.exe --eval" && quote & "printjson(db.test.find())" & quote) into pJSON
put pJSON into fld "a"
put offset("{",pJSON) into desde
put the length of pJSON into largo
put char desde to largo of pJSON into pJSON
put pJSON into fld "B"
put JSONToArray(pJSON) into tArray
put tArray["a"]
end mouseup
function JSONToArray pJSON
local tArray,tKeys
repeat for each line tKey in mergJSONDecode(pJSON,"tArray")
put JSONToArray(tArray[tKey]) into tArray[tKey]
end repeat
return tArray
end JSONToArray
Please take note on all the string manipulation I did to isolate the document from the response of the server, mouseup converts this:
MongoDB shell version: 2.2.7
connecting to: test
{ "_id" : ObjectId("52e3f87c8da8b1efb07004c9"), "a" : 1 }
To this:
{ "_id" : ObjectId("52e3f87c8da8b1efb07004c9"), "a" : 1 }
After I “parsed” the original response from the server I thought I produced a JSON, but validating it with an online service, I discovered that it really isn’t a JSON. That is why the function JSONToArray(pJSON) fails . I think this string manipulation is not needed and the problem is that I am doing something wrong retrieving data from the server.
What I described is one of the problems I found, the other happens when in the mouseup handler,
I replace:
put shell("C:\\mongodb\bin\mongo.exe --eval" && quote & "printjson(db.test.findOne())" & quote) into pJSON
With
put shell("C:\\mongodb\bin\mongo.exe --eval" && quote & "printjson(db.test.find())" & quote) into pJSON
This time fld “A” gets:
MongoDB shell version: 2.2.7
connecting to: test
{
_"_mongo" : connection to 127.0.0.1,
_"_db" : test,
_"_collection" : test.test,
_"_ns" : "test.test",
_"_query" : {
__
_},
_"_fields" : null,
_"_limit" : 0,
_"_skip" : 0,
_"_batchSize" : 0,
_"_options" : 0,
_"_cursor" : null,
_"_numReturned" : 0,
_"_special" : false,
_"help" : function () {
print("find() modifiers");
...
...
...
}
Seems printjson(db.test.find()) is returning some kind of description, instead of the documents test contains.
Any comments/suggestion will be appreciated,
Saludos, Javier