Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. [Announcement] QtMongo: access to MongoDB from QML
Forum Updated to NodeBB v4.3 + New Features

[Announcement] QtMongo: access to MongoDB from QML

Scheduled Pinned Locked Moved QML and Qt Quick
9 Posts 5 Posters 12.8k Views 1 Watching
  • 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 Offline
    M Offline
    manuelsch
    wrote on last edited by
    #1

    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
    0
    • AlicemirrorA Offline
      AlicemirrorA Offline
      Alicemirror
      wrote on last edited by
      #2

      Great idea, I will follow this development.

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

      1 Reply Last reply
      0
      • S Offline
        S Offline
        Scylla
        wrote on last edited by
        #3

        That's great stuff and I will test it.

        1 Reply Last reply
        0
        • M Offline
          M Offline
          moo1
          wrote on last edited by
          #4

          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
          0
          • AlicemirrorA Offline
            AlicemirrorA Offline
            Alicemirror
            wrote on last edited by
            #5

            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
            0
            • M Offline
              M Offline
              manuelsch
              wrote on last edited by
              #6

              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
              0
              • AlicemirrorA Offline
                AlicemirrorA Offline
                Alicemirror
                wrote on last edited by
                #7

                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
                0
                • M Offline
                  M Offline
                  manuelsch
                  wrote on last edited by
                  #8

                  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
                  0
                  • T Offline
                    T Offline
                    tanjaon-browser
                    wrote on last edited by
                    #9

                    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
                    0

                    • Login

                    • Login or register to search.
                    • First post
                      Last post
                    0
                    • Categories
                    • Recent
                    • Tags
                    • Popular
                    • Users
                    • Groups
                    • Search
                    • Get Qt Extensions
                    • Unsolved