Qt Forum

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Unsolved

    Call for Presentations - Qt World Summit

    [Announcement] QtMongo: access to MongoDB from QML

    QML and Qt Quick
    5
    9
    11567
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      manuelsch last edited by

      Hi,

      if anybody is interested: I created a QML plugin to access MongoDB (a NoSQL database).
      Using MongoDB you don't need any SQL commands, the interface to the database is very javascript-orientated.
      If you like, you can try it at https://github.com/manuels/QtMongo
      but please don't expect too much. It's in a very early development status.
      Feedback very welcome!

      Cheers,

      Manuel

      QtMongo Demo Code:
      @
      import Qt 4.7

      ListView {
      id: listview
      width: 300
      height: 500

      MongoDB {
          id: db
          name: "testdb"
          host: "localhost"
      
          collections: [
              MongoCollection {
                      id: mythings
                      name: "things"
              }
          ]
      }
      
      delegate: mydelegate
      // this corresponds to mythings.find({})
      model: MongoQuery {
          collection: mythings
          query: {}
      }
      
      Component {
          id: mydelegate
          Text { text: obj.toString() }
      }
      
      Rectangle {
          id: rectangle1
          x: 183
          y: 72
          width: 100
          height: 100
          color: "#d53737"
      
      
          MouseArea {
              id: mouse_area1
              anchors.fill: parent
      
      
              onClicked: {
                  // this corresponds to SQL's "WHERE j=5":
                  console.debug( db.collection("testdb.things").find({j:5}) )
                  // insert an object:
                  console.debug( db.collection("testdb.things").insert({ddd:445}) )
      
                  // find all objects with "j=5" and present it in the listview:
                  listview.model = db.collection("testdb.things").find({j:5})
                  // find all objects and present it in the listview:
                  listview.model = db.collection("testdb.things").find({})
      
                  // find all objects with ddd=445, create a copy of it (upsert) and modify ddd to 446:
                  console.debug( db.collection("testdb.things").update({ddd:445},{ddd:446}, {upsert: true}) )
                  // find all objects in mythings
                  console.debug( mythings.find({}) )
      
                  // map reduce:
                  console.debug("mapReduce:");
                  var map = function() { emit(this.j); }
                  var reduce = function(k,vals) { return 1; }
                  // take care: you've got to call toString() for each function!
                  console.debug( mythings.mapReduce(map.toString(), reduce.toString()) )
                  // but you cannot get the result of mapReduce, yet. That's what I'm currently working on
              }
          }
      }
      

      }
      @

      1 Reply Last reply Reply Quote 0
      • Alicemirror
        Alicemirror last edited by

        Great idea, I will follow this development.

        Enrico Miglino (aka Alicemirror)
        Balearic Dynamics
        Islas Baleares, Ibiza (Spain)
        www.balearicdynamics.com

        1 Reply Last reply Reply Quote 0
        • S
          Scylla last edited by

          That's great stuff and I will test it.

          1 Reply Last reply Reply Quote 0
          • M
            moo1 last edited by

            I like MongoDB and nice to see QML binding. What is the target platform? I wonder if MongoDB itself builds on Symbian, for instance.

            1 Reply Last reply Reply Quote 0
            • Alicemirror
              Alicemirror last edited by

              Me too, to idea of your project for me is to work with small database structures with the advantage of the database without the weight ot sql. What I have not yet clear, is what can be the advantage regardless of my considerations to work with a non-standard database.

              Enrico Miglino (aka Alicemirror)
              Balearic Dynamics
              Islas Baleares, Ibiza (Spain)
              www.balearicdynamics.com

              1 Reply Last reply Reply Quote 0
              • M
                manuelsch last edited by

                It's me again!

                I just finished some work: I've removed a lot of C++ code and just copy-paste'd the MongoDB shell scripts.
                That superseded a lot of development. Almost all the code in written in Javascript and it's (probably) feature complete (but probably not free of bugs).
                If you like, just try it and tell me if there are any bugs.

                bq. What is the target platform?

                Currently, it uses the standard MongoDB-C++ driver. I'm working under Linux and I've never used Symbian. So you better ask a Symbian developer if this would work.

                bq. What I have not yet clear, is what can be the advantage regardless of my considerations to work with a non-standard database.

                Sorry, perhaps I have a language problem here: I don't understand what you mean.

                1 Reply Last reply Reply Quote 0
                • Alicemirror
                  Alicemirror last edited by

                  Hello!

                  Sure, I try asap. At the moment I should finish a couple of app, but before the end of the week, I download the repo and start to check all. The main use I need to do with this database is on symbian platforms, so if you can be patient for a couple of week I update you on the results. I give you more news on the application (developing) I choice to test Mongo-DB.

                  Many thanks for sharing this useful work.

                  Enrico Miglino (aka Alicemirror)
                  Balearic Dynamics
                  Islas Baleares, Ibiza (Spain)
                  www.balearicdynamics.com

                  1 Reply Last reply Reply Quote 0
                  • M
                    manuelsch last edited by

                    Ok, just a status update:
                    I'm currently working to make MongoDB's JS test units pass.
                    The problem is, that MongoDB's shell uses custom types (like NumberLong, BinData...) and it's quite difficult to make these work in QML, but I think I have a plan now, how to do it...

                    1 Reply Last reply Reply Quote 0
                    • T
                      tanjaon-browser last edited by

                      I gave up on MongoDB a year ago because its drivers can be crazy hard to compile (at least on Windows). I got the C++ driver to build, finally, after a number of hours, using a MSVC compiler. I love the idea of Qt integration (and bugged several employees of the company who makes Mongo about it, at the meetings they host about general C++ development), so I have high hopes for this project, but am still stumbling on build problems. In particular, Qt plays much nicer with MinGW but Mongo buddies up better with MSVC, so trying to build QtMongo I've been unable to resolve problems with wsiapi (the windows socket implementation). Any suggestions? Thanks

                      1 Reply Last reply Reply Quote 0
                      • First post
                        Last post