{"_id":"mongodb-querybuilder","_rev":"123-f877d0d044207f25f24ce641b4e084cd","name":"mongodb-querybuilder","dist-tags":{"latest":"0.3.2"},"versions":{"0.0.6":{"name":"mongodb-querybuilder","version":"0.0.6","keywords":["mongodb","mongodb.js","mongoscope","query","builder","aggregation"],"author":{"name":"Thomas Rueckstiess","email":"thomas@rueckstiess.net"},"license":"Apache","_id":"mongodb-querybuilder@0.0.6","maintainers":[{"name":"rueckstiess","email":"thomas@rueckstiess.net"}],"homepage":"http://github.com/rueckstiess/mongodb-querybuilder","bugs":{"url":"https://github.com/rueckstiess/mongodb-querybuilder/issues"},"dist":{"shasum":"835aa3657ae1ec09606ea7d508d9f91f22580ecf","tarball":"https://registry.npmjs.org/mongodb-querybuilder/-/mongodb-querybuilder-0.0.6.tgz","integrity":"sha512-3P8Sonp03pWafrSxqtlOTY+gLMkSalL4NqilcW6PeJfpSfpMZGIZ/7KiD9zfqIuVwRn+n6II50xRWBbW8EIH3Q==","signatures":[{"sig":"MEYCIQDp3hMyWCTMhMBpnb6ZDMOZDzFlM2QgTkW/FmbqCmLU0wIhAO2buu9GRJ9xv9AeX6qtYSBYfBh5xDuoOV1nhXoGIgEc","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","scripts":{"ci":"zuul -- test/*.test.js","dist":"gulp dist","test":"zuul --local 8080 -- test/*.test.js","start":"gulp"},"_npmUser":{"name":"rueckstiess","email":"thomas@rueckstiess.net"},"repository":{"url":"git://github.com/rueckstiess/mongodb-querybuilder.git","type":"git"},"_npmVersion":"1.4.3","description":"A wrapper of queries and aggregation calls to MongoDB via the mongoscope client","directories":{},"dependencies":{"debug":"^1.0.3","backbone":"^1.1.2","mongodb-ns":"0.0.4","underscore":"^1.6.0","mongodb-schema":"^0.0.6","mongoscope-client":"^0.1.2"},"devDependencies":{"gulp":"^3.8.1","zuul":"^1.7.0","ecstatic":"^0.5.3","browserify":"^4.1.6","gulp-rename":"^1.2.0","github-release":"^0.0.2","vinyl-source-stream":"^0.1.1"}},"0.0.7":{"name":"mongodb-querybuilder","version":"0.0.7","keywords":["mongodb","mongodb.js","mongoscope","query","builder","aggregation"],"author":{"name":"Thomas Rueckstiess","email":"thomas@rueckstiess.net"},"license":"Apache","_id":"mongodb-querybuilder@0.0.7","maintainers":[{"name":"rueckstiess","email":"thomas@rueckstiess.net"}],"homepage":"http://github.com/rueckstiess/mongodb-querybuilder","bugs":{"url":"https://github.com/rueckstiess/mongodb-querybuilder/issues"},"dist":{"shasum":"dd108281eb9267704df33bc28955785849d6185a","tarball":"https://registry.npmjs.org/mongodb-querybuilder/-/mongodb-querybuilder-0.0.7.tgz","integrity":"sha512-gnTZUY5oP2qB3KnWDl9mqRc6FdBtdWSFnBfyj9LOaYO43QZ9G+XBVifxr4/aH0ItqaxwgzoOEyt+2MM49/Oq2A==","signatures":[{"sig":"MEUCIQD1dCUpT3rQqElugfVvtmYwyiFg+KOG/DE1KBQjzuqSogIgfSuhquy+0qGkaoo6Xfc8CM1XsfFyxncCLunVLKDmPPo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","scripts":{"ci":"zuul -- test/*.test.js","dist":"gulp dist","test":"zuul --local 8080 -- test/*.test.js","start":"gulp"},"_npmUser":{"name":"rueckstiess","email":"thomas@rueckstiess.net"},"repository":{"url":"git://github.com/rueckstiess/mongodb-querybuilder.git","type":"git"},"_npmVersion":"1.4.3","description":"A wrapper of queries and aggregation calls to MongoDB via the mongoscope client","directories":{},"dependencies":{"debug":"^1.0.3","backbone":"^1.1.2","mongodb-ns":"0.0.4","underscore":"^1.6.0","mongodb-schema":"^0.0.7","mongoscope-client":"^0.1.2"},"devDependencies":{"gulp":"^3.8.1","zuul":"^1.7.0","ecstatic":"^0.5.3","browserify":"^4.1.6","gulp-rename":"^1.2.0","github-release":"^0.0.2","vinyl-source-stream":"^0.1.1"}},"0.0.8":{"name":"mongodb-querybuilder","version":"0.0.8","keywords":["mongodb","mongodb.js","mongoscope","query","builder","aggregation"],"author":{"name":"Thomas Rueckstiess","email":"thomas@rueckstiess.net"},"license":"Apache","_id":"mongodb-querybuilder@0.0.8","maintainers":[{"name":"rueckstiess","email":"thomas@rueckstiess.net"}],"homepage":"http://github.com/rueckstiess/mongodb-querybuilder","bugs":{"url":"https://github.com/rueckstiess/mongodb-querybuilder/issues"},"dist":{"shasum":"7b78d18789bb69c8e57e2eafea7a89c1a3e8f747","tarball":"https://registry.npmjs.org/mongodb-querybuilder/-/mongodb-querybuilder-0.0.8.tgz","integrity":"sha512-mYZI2pSSTQ4d/0EnGYpnfhpqOAh5fYf+MqYcOCpKvfhwC2n4ufo9gGJE4DrBhKGxzzhq4O1Ec44C9nFE6xdtVA==","signatures":[{"sig":"MEQCICGAV6bxKZ6Zexzh6nzfos+FgY7lDNEyFmc6jdTjkXU4AiBTP71DF4TLCZiza7AuPZVPiDg4FdV7fJoEmMTKO9IAUg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","scripts":{"ci":"zuul -- test/*.test.js","dist":"gulp dist","test":"zuul --local 8080 -- test/*.test.js","start":"gulp"},"_npmUser":{"name":"rueckstiess","email":"thomas@rueckstiess.net"},"repository":{"url":"git://github.com/rueckstiess/mongodb-querybuilder.git","type":"git"},"_npmVersion":"1.4.3","description":"A wrapper of queries and aggregation calls to MongoDB via the mongoscope client","directories":{},"dependencies":{"debug":"^1.0.3","backbone":"^1.1.2","mongodb-ns":"0.0.4","underscore":"^1.6.0","mongodb-schema":"^0.0.7","mongoscope-client":"^0.1.2"},"devDependencies":{"gulp":"^3.8.1","zuul":"^1.7.0","ecstatic":"^0.5.3","browserify":"^4.1.6","gulp-rename":"^1.2.0","github-release":"^0.0.2","vinyl-source-stream":"^0.1.1"}},"0.0.9":{"name":"mongodb-querybuilder","version":"0.0.9","keywords":["mongodb","mongodb.js","mongoscope","query","builder","aggregation"],"author":{"name":"Thomas Rueckstiess","email":"thomas@rueckstiess.net"},"license":"Apache","_id":"mongodb-querybuilder@0.0.9","maintainers":[{"name":"rueckstiess","email":"thomas@rueckstiess.net"}],"homepage":"http://github.com/rueckstiess/mongodb-querybuilder","bugs":{"url":"https://github.com/rueckstiess/mongodb-querybuilder/issues"},"dist":{"shasum":"4cb6df5bea1f20ebbe97948308a190e197b67814","tarball":"https://registry.npmjs.org/mongodb-querybuilder/-/mongodb-querybuilder-0.0.9.tgz","integrity":"sha512-xejd2/4uwf5jaCek2GKH9wOtKwzd/r2FyIyizOm2oseg52kzgkaMW+ctphDyZhJq2uLaikShqz4HhTEhafpmJg==","signatures":[{"sig":"MEUCIQDpywPQt19Ln23G6igaKdPbcqxPC6UcCPFKHFSGsnxexAIgN8573apamcliCzGYVzExsp7P9/lOq86Pdv/tXufIb3U=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","scripts":{"ci":"zuul -- test/*.test.js","dist":"gulp dist","test":"zuul --local 8080 -- test/*.test.js","start":"gulp"},"_npmUser":{"name":"rueckstiess","email":"thomas@rueckstiess.net"},"repository":{"url":"git://github.com/rueckstiess/mongodb-querybuilder.git","type":"git"},"_npmVersion":"1.4.3","description":"A wrapper of queries and aggregation calls to MongoDB via the mongoscope client","directories":{},"dependencies":{"debug":"^1.0.3","backbone":"^1.1.2","mongodb-ns":"0.0.4","underscore":"^1.6.0","mongodb-schema":"^0.0.7","mongoscope-client":"^0.1.2"},"devDependencies":{"gulp":"^3.8.1","zuul":"^1.7.0","ecstatic":"^0.5.3","browserify":"^4.1.6","gulp-rename":"^1.2.0","github-release":"^0.0.2","vinyl-source-stream":"^0.1.1"}},"0.0.10":{"name":"mongodb-querybuilder","version":"0.0.10","keywords":["mongodb","mongodb.js","mongoscope","query","builder","aggregation"],"author":{"name":"Thomas Rueckstiess","email":"thomas@rueckstiess.net"},"license":"Apache","_id":"mongodb-querybuilder@0.0.10","maintainers":[{"name":"rueckstiess","email":"thomas@rueckstiess.net"}],"homepage":"http://github.com/rueckstiess/mongodb-querybuilder","bugs":{"url":"https://github.com/rueckstiess/mongodb-querybuilder/issues"},"dist":{"shasum":"c5439eebc44951be9f0ffc9a484b54f422fd2ea4","tarball":"https://registry.npmjs.org/mongodb-querybuilder/-/mongodb-querybuilder-0.0.10.tgz","integrity":"sha512-cMPvNqCT4XjfDAomOByMKOW0cgtXjLO7CEGjtWLN+d4uikyz2aE+HxzPnqDH3TwfUhApo5t13DfFYCp4Zs69+A==","signatures":[{"sig":"MEUCICJiGDT85QExk3zIGs4vUBBQDDkxTGjsQGRAePsMpbKcAiEAiv9cKCajoBBrF/JYoMrogpjZfXwa+baj7u0fcqnqHao=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","scripts":{"ci":"zuul -- test/*.test.js","dist":"gulp dist","test":"zuul --local 8080 -- test/*.test.js","start":"gulp"},"_npmUser":{"name":"rueckstiess","email":"thomas@rueckstiess.net"},"repository":{"url":"git://github.com/rueckstiess/mongodb-querybuilder.git","type":"git"},"_npmVersion":"1.4.3","description":"A wrapper of queries and aggregation calls to MongoDB via the mongoscope client","directories":{},"dependencies":{"debug":"^1.0.3","backbone":"^1.1.2","mongodb-ns":"0.0.4","underscore":"^1.6.0","mongodb-schema":"^0.0.8","mongoscope-client":"^0.1.2"},"devDependencies":{"gulp":"^3.8.1","zuul":"^1.7.0","ecstatic":"^0.5.3","browserify":"^4.1.6","gulp-rename":"^1.2.0","github-release":"^0.0.2","vinyl-source-stream":"^0.1.1"}},"0.1.0":{"name":"mongodb-querybuilder","version":"0.1.0","keywords":["mongodb","mongodb.js","mongoscope","query","builder","aggregation"],"author":{"name":"Thomas Rueckstiess","email":"thomas@rueckstiess.net"},"license":"Apache","_id":"mongodb-querybuilder@0.1.0","maintainers":[{"name":"rueckstiess","email":"thomas@rueckstiess.net"}],"homepage":"http://github.com/rueckstiess/mongodb-querybuilder","bugs":{"url":"https://github.com/rueckstiess/mongodb-querybuilder/issues"},"dist":{"shasum":"7fd3d2a2947a50eb83917a39c906c9151f5990f6","tarball":"https://registry.npmjs.org/mongodb-querybuilder/-/mongodb-querybuilder-0.1.0.tgz","integrity":"sha512-7y0KzEUY7uCbk+B9gJ1TWFDIUR61zbUIVPTNUgY+xCBTW5cPVeovVDGxVRPrE05l9PpCucbSyNL0JTUP6pxy+w==","signatures":[{"sig":"MEQCICIKaOPUBABttuXTCxCVFozVkshfs/im5hSNvuC7kj/WAiAG6VIXpPbu1DwVBPKVTIOEwHRT8xYAOMk3598o6aS4sQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","scripts":{"ci":"zuul -- test/*.test.js","dist":"gulp dist","test":"zuul --local 8080 -- test/*.test.js","start":"gulp"},"_npmUser":{"name":"rueckstiess","email":"thomas@rueckstiess.net"},"repository":{"url":"git://github.com/rueckstiess/mongodb-querybuilder.git","type":"git"},"_npmVersion":"1.4.3","description":"A wrapper of queries and aggregation calls to MongoDB via the mongoscope client","directories":{},"dependencies":{"debug":"^1.0.3","backbone":"^1.1.2","mongodb-ns":"0.0.4","underscore":"^1.6.0","mongodb-schema":"^0.0.8","mongoscope-client":"^0.1.2"},"devDependencies":{"gulp":"^3.8.1","zuul":"^1.7.0","ecstatic":"^0.5.3","browserify":"^4.1.6","gulp-rename":"^1.2.0","github-release":"^0.0.2","vinyl-source-stream":"^0.1.1"}},"0.1.3":{"name":"mongodb-querybuilder","version":"0.1.3","keywords":["mongodb","mongodb.js","mongoscope","query","builder","aggregation"],"author":{"name":"Thomas Rueckstiess","email":"thomas@rueckstiess.net"},"license":"Apache","_id":"mongodb-querybuilder@0.1.3","maintainers":[{"name":"rueckstiess","email":"thomas@rueckstiess.net"}],"homepage":"http://github.com/rueckstiess/mongodb-querybuilder","bugs":{"url":"https://github.com/rueckstiess/mongodb-querybuilder/issues"},"dist":{"shasum":"5d758ee1c7c680eae958ca10182d095a8c2b4b02","tarball":"https://registry.npmjs.org/mongodb-querybuilder/-/mongodb-querybuilder-0.1.3.tgz","integrity":"sha512-DSMeBcVthdBgmiPpuEYATrKGOmrRssRWY8N2emyif2lhXIUtvHoLxcEcANdfmGxjC1spOrHyxTdq9JGiKz8p0w==","signatures":[{"sig":"MEUCIDpw44ATL3LQBK+jurV/C2GxhEPfzeClbUddiJfBCl1SAiEAmKWg6guZS/C3uTptyxcwpoU7RgaBp7rlAswrIhnMK5I=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","scripts":{"ci":"zuul -- test/*.test.js","dist":"gulp dist","test":"zuul --local 8080 -- test/*.test.js","start":"gulp"},"_npmUser":{"name":"rueckstiess","email":"thomas@rueckstiess.net"},"repository":{"url":"git://github.com/rueckstiess/mongodb-querybuilder.git","type":"git"},"_npmVersion":"1.4.3","description":"A wrapper of queries and aggregation calls to MongoDB via the mongoscope client","directories":{},"dependencies":{"debug":"^1.0.3","backbone":"^1.1.2","mongodb-ns":"0.0.4","underscore":"^1.6.0","mongodb-schema":"^0.0.8","mongoscope-client":"^0.1.2"},"devDependencies":{"gulp":"^3.8.1","zuul":"^1.7.0","ecstatic":"^0.5.3","browserify":"^4.1.6","gulp-rename":"^1.2.0","github-release":"^0.0.2","vinyl-source-stream":"^0.1.1"}},"0.1.4":{"name":"mongodb-querybuilder","version":"0.1.4","keywords":["mongodb","mongodb.js","mongoscope","query","builder","aggregation"],"author":{"name":"Thomas Rueckstiess","email":"thomas@rueckstiess.net"},"license":"Apache","_id":"mongodb-querybuilder@0.1.4","maintainers":[{"name":"rueckstiess","email":"thomas@rueckstiess.net"}],"homepage":"http://github.com/rueckstiess/mongodb-querybuilder","bugs":{"url":"https://github.com/rueckstiess/mongodb-querybuilder/issues"},"dist":{"shasum":"43c391d34767a5b001bb15549a255a161f29f854","tarball":"https://registry.npmjs.org/mongodb-querybuilder/-/mongodb-querybuilder-0.1.4.tgz","integrity":"sha512-zyYC4DiiBfguiMsFETVdPHo6bI4+5jflb0zQ7+PT5FL8FTaaAzofStDd49JTgVvx6IWcYdfEUZPVYOMN0B4EAQ==","signatures":[{"sig":"MEYCIQDdSNesgRQ3tXki9XJ1+UD0JDabzsDOF65CAUqmTO+EpAIhAJ+qXgVu19S7k/DaDdH1oGBU5xxSdOk+Ies1m1Cc61kH","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","scripts":{"ci":"zuul -- test/*.test.js","dist":"gulp dist","test":"zuul --local 8080 -- test/*.test.js","start":"gulp"},"_npmUser":{"name":"rueckstiess","email":"thomas@rueckstiess.net"},"repository":{"url":"git://github.com/rueckstiess/mongodb-querybuilder.git","type":"git"},"_npmVersion":"1.4.3","description":"A wrapper of queries and aggregation calls to MongoDB via the mongoscope client","directories":{},"dependencies":{"debug":"^1.0.3","backbone":"^1.1.2","mongodb-ns":"0.0.4","underscore":"^1.6.0","mongodb-schema":"^0.0.9","mongoscope-client":"^0.1.3"},"devDependencies":{"gulp":"^3.8.1","zuul":"^1.7.0","ecstatic":"^0.5.3","browserify":"^4.1.6","gulp-rename":"^1.2.0","github-release":"^0.0.2","vinyl-source-stream":"^0.1.1"}},"0.3.0":{"name":"mongodb-querybuilder","version":"0.3.0","keywords":["mongodb","mongodb.js","mongoscope","query","builder","aggregation"],"author":{"name":"Thomas Rueckstiess","email":"thomas@rueckstiess.net"},"license":"Apache","_id":"mongodb-querybuilder@0.3.0","maintainers":[{"name":"rueckstiess","email":"thomas@rueckstiess.net"}],"homepage":"http://github.com/rueckstiess/mongodb-querybuilder","bugs":{"url":"https://github.com/rueckstiess/mongodb-querybuilder/issues"},"dist":{"shasum":"34e15ca8e790841a0e3b59b2a8dbdb67eb00fe36","tarball":"https://registry.npmjs.org/mongodb-querybuilder/-/mongodb-querybuilder-0.3.0.tgz","integrity":"sha512-459jFDzjz84YCOWdpvMtCkx639fcOTngo5pknv+uu0WDgRo2mDI5z+Yn517xOpy5s6TGPEjQYi4Mkka+mAYbLA==","signatures":[{"sig":"MEUCIBvieeqrc0qYNnNDV8UOXZL/9a8lk7IDA0PEFST65E9gAiEA/284aUyxyhSsD8sFxPKxDDMQ/iG64uOt9X2yYHlwUY0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","scripts":{"ci":"zuul -- test/*.test.js","dist":"gulp dist","test":"zuul --local 8080 -- test/*.test.js","start":"gulp"},"_npmUser":{"name":"rueckstiess","email":"thomas@rueckstiess.net"},"repository":{"url":"git://github.com/rueckstiess/mongodb-querybuilder.git","type":"git"},"_npmVersion":"1.4.3","description":"A wrapper of queries and aggregation calls to MongoDB via the mongoscope client","directories":{},"dependencies":{"debug":"^1.0.3","backbone":"^1.1.2","mongodb-ns":"0.0.4","underscore":"^1.6.0","mongodb-schema":"^0.0.9","mongoscope-client":"^0.2.2"},"devDependencies":{"gulp":"^3.8.1","zuul":"^1.7.0","ecstatic":"^0.5.3","browserify":"^4.1.6","gulp-rename":"^1.2.0","github-release":"^0.0.2","vinyl-source-stream":"^0.1.1"}},"0.3.1":{"name":"mongodb-querybuilder","version":"0.3.1","keywords":["mongodb","mongodb.js","mongoscope","query","builder","aggregation"],"author":{"name":"Thomas Rueckstiess","email":"thomas@rueckstiess.net"},"license":"Apache","_id":"mongodb-querybuilder@0.3.1","maintainers":[{"name":"rueckstiess","email":"thomas@rueckstiess.net"}],"homepage":"http://github.com/rueckstiess/mongodb-querybuilder","bugs":{"url":"https://github.com/rueckstiess/mongodb-querybuilder/issues"},"dist":{"shasum":"e167869c401826f92a7c8e484f7b4ea2d945b661","tarball":"https://registry.npmjs.org/mongodb-querybuilder/-/mongodb-querybuilder-0.3.1.tgz","integrity":"sha512-+FQGJ8ptmD4KAyRAzuzFsO+d13DQuADGBR29FDf7SHSPPm2r7/luIduUhRgXMWKExa7o8hjx1g03yq214+S06Q==","signatures":[{"sig":"MEUCIQDzHemXOh3pzrdCxplWbPYh9kHkCllBPkSByyfZo/Tx/QIgPD8JdRUilmJbi5yrxtX4LLy9sH69I6HkLoFVaNaZ9bQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","scripts":{"ci":"zuul -- test/*.test.js","dist":"gulp dist","test":"zuul --local 8080 -- test/*.test.js","start":"gulp"},"_npmUser":{"name":"rueckstiess","email":"thomas@rueckstiess.net"},"repository":{"url":"git://github.com/rueckstiess/mongodb-querybuilder.git","type":"git"},"_npmVersion":"1.4.3","description":"A wrapper of queries and aggregation calls to MongoDB via the mongoscope client","directories":{},"dependencies":{"debug":"^1.0.3","backbone":"^1.1.2","mongodb-ns":"0.0.4","underscore":"^1.6.0","mongodb-schema":"^0.0.9","mongoscope-client":"^0.2.2"},"devDependencies":{"gulp":"^3.8.1","zuul":"^1.7.0","ecstatic":"^0.5.3","browserify":"^4.1.6","gulp-rename":"^1.2.0","github-release":"^0.0.2","vinyl-source-stream":"^0.1.1"}},"0.3.2":{"name":"mongodb-querybuilder","version":"0.3.2","keywords":["mongodb","mongodb.js","mongoscope","query","builder","aggregation"],"author":{"name":"Thomas Rueckstiess","email":"thomas@rueckstiess.net"},"license":"Apache","_id":"mongodb-querybuilder@0.3.2","maintainers":[{"name":"rueckstiess","email":"thomas@rueckstiess.net"}],"homepage":"http://github.com/rueckstiess/mongodb-querybuilder","bugs":{"url":"https://github.com/rueckstiess/mongodb-querybuilder/issues"},"dist":{"shasum":"413b145e5e8fad058db9554e681ecb05f3e9a77c","tarball":"https://registry.npmjs.org/mongodb-querybuilder/-/mongodb-querybuilder-0.3.2.tgz","integrity":"sha512-UrQhQ5AvcSjIvCPeN3ATwVmNvB714M9A5/OUu7fHeN2gpuBW3w2m0hjBEH1gzcvG2kbsviHbEG1UbcwTc3P4rA==","signatures":[{"sig":"MEYCIQDRidseU3pb/sDBbbFAzGsMM+1unwLh3/ClLh/uoX5L/wIhAJFkxpGFDqgYsj4wGFIhS80kLew9W5pt4YkFlaSJ+8mD","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","scripts":{"ci":"zuul -- test/*.test.js","dist":"gulp dist","test":"zuul --local 8080 -- test/*.test.js","start":"gulp"},"_npmUser":{"name":"rueckstiess","email":"thomas@rueckstiess.net"},"repository":{"url":"git://github.com/rueckstiess/mongodb-querybuilder.git","type":"git"},"_npmVersion":"1.4.3","description":"A wrapper of queries and aggregation calls to MongoDB via the mongoscope client","directories":{},"dependencies":{"debug":"^1.0.3","backbone":"^1.1.2","mongodb-ns":"0.0.4","underscore":"^1.6.0","mongodb-schema":"^0.0.9","mongoscope-client":"^0.2.3"},"devDependencies":{"gulp":"^3.8.1","zuul":"^1.7.0","ecstatic":"^0.5.3","browserify":"^4.1.6","gulp-rename":"^1.2.0","github-release":"^0.0.2","vinyl-source-stream":"^0.1.1"}}},"time":{"created":"2014-07-16T19:36:37.292Z","modified":"2026-07-15T15:36:16.532Z","0.0.6":"2014-07-16T19:36:37.292Z","0.0.7":"2014-07-18T12:05:36.443Z","0.0.8":"2014-07-19T13:43:42.822Z","0.0.9":"2014-07-19T13:48:32.424Z","0.0.10":"2014-07-19T17:39:21.475Z","0.1.0":"2014-07-19T22:09:42.438Z","0.1.3":"2014-07-21T11:48:48.332Z","0.1.4":"2014-07-24T01:25:06.783Z","0.3.0":"2014-07-27T21:42:44.407Z","0.3.1":"2014-07-28T15:22:26.091Z","0.3.2":"2014-07-28T15:27:47.309Z"},"bugs":{"url":"https://github.com/rueckstiess/mongodb-querybuilder/issues"},"author":{"name":"Thomas Rueckstiess","email":"thomas@rueckstiess.net"},"license":"Apache","homepage":"http://github.com/rueckstiess/mongodb-querybuilder","keywords":["mongodb","mongodb.js","mongoscope","query","builder","aggregation"],"repository":{"url":"git://github.com/rueckstiess/mongodb-querybuilder.git","type":"git"},"description":"A wrapper of queries and aggregation calls to MongoDB via the mongoscope client","maintainers":[{"email":"satya@mongodb.com","name":"satyasinha"},{"email":"kristina.stefanova@mongodb.com","name":"kristina.stefano"},{"email":"nathan.smyth@10gen.com","name":"jarjee"},{"email":"iteng@mongodb.com","name":"devtoolsbot"},{"email":"james.wang@mongodb.com","name":"mongo-j"},{"email":"neal.beeken@mongodb.com","name":"nbbeeken"},{"email":"dbx-node@mongodb.com","name":"dbx-node"},{"email":"devtools-npm-user@mongodb.com","name":"devtools-npm-user"},{"email":"me@tomr.au","name":"rueckstiess"}],"readme":"# mongodb-querybuilder\n\n`mongodb-querybuilder` is a javascript helper that provides some convenience methods to easily build MongoDB \n[Aggregation Framework](http://docs.mongodb.org/manual/core/aggregation-pipeline/) pipelines. It is based on the concept of [Fluent APIs](http://en.wikipedia.org/wiki/Fluent_interface) and automatically handles a lot of the necessary pipeline stages that are just a means to an end (like `$unwind`ing, `$project`ing nested fields to the top level, etc).\n\n## Installation\n\n```\nnpm install\n```\n\n## Testing\n\n```\nnpm test\n```\n\nAnd then open [http://localhost:8080/__zuul](http://localhost:8080/__zuul) in a browser.\n\n## Dist\n\nOf course the preferred way to use -querybuilder is npm+browserify, but sometimes\nbeing able to just drop a script tag into a codepen is nedded.\n\n1. Create a [GitHub Access Token](https://help.github.com/articles/creating-an-access-token-for-command-line-use)\n1. Export your access token as `GITHUB_TOKEN={{YOUR TOKEN}}`\n1. `npm run-script dist`\n\n## Todo\n\n- [ ] Setup travis for saucelabs.  see [zuul docs](https://github.com/defunctzombie/zuul/wiki/travis-ci)\n- [ ] Write lots more tests\n\n## Example\n\nThe query builder turns that:\n\n```js\nbuilder\n    .match(\"fields.reporter.name\", [\"thomasr\", \"ramon.fernandez\", \"spencer\"])\n    .match(\"fields.components.name\", [\"Security\", \"Sharding\"])\n    .match(\"changelog.total\", [10, 50])\n    .group(\"x-axis\", [\"fields.fixVersions.name\", \"fields.status\"])\n        .agg(\"y-axis\", \"$sum\", 1)\n        .agg(\"size\", \"$avg\", \"changelog.total\")\n        .agg(\"_ids\", \"$push\", \"_id\")\n    .limit(5);\n```\n\ninto that:\n\n```json\n[\n    {\n        \"$match\": {\n            \"fields.reporter.name\": {\n                \"$in\": [\n                    \"thomasr\",\n                    \"ramon.fernandez\",\n                    \"spencer\"\n                ]\n            },\n            \"fields.components.name\": {\n                \"$in\": [\n                    \"Security\",\n                    \"Sharding\"\n                ]\n            },\n            \"changelog.total\": {\n                \"$gte\": 10,\n                \"$lte\": 50\n            }\n        }\n    },\n    {\n        \"$unwind\": \"$fields.fixVersions\"\n    },\n    {\n        \"$project\": {\n            \"fields_fixVersions_name\": \"$fields.fixVersions.name\",\n            \"fields_status\": \"$fields.status\",\n            \"changelog_total\": \"$changelog.total\",\n            \"_id\": \"$_id\"\n        }\n    },\n    {\n        \"$group\": {\n            \"_id\": {\n                \"fields_fixVersions_name\": \"$fields_fixVersions_name\",\n                \"fields_status\": \"$fields_status\"\n            },\n            \"y-axis\": {\n                \"$sum\": 1\n            },\n            \"size\": {\n                \"$avg\": \"$changelog_total\"\n            },\n            \"_ids\": {\n                \"$push\": \"$_id\"\n            }\n        }\n    },\n    {\n        \"$limit\": 5\n    },\n    {\n        \"$project\": {\n            \"y-axis\": \"$y-axis\",\n            \"size\": \"$size\",\n            \"_ids\": \"$_ids\",\n            \"x-axis\": \"$_id\",\n            \"_id\": 0\n        }\n    }\n]\n```\n\n\nFull example (see also [index.html](./index.html)): \n\n```html\n<!DOCTYPE html>\n<html>\n<head>\n    <title>QueryBuilder Test</title>\n</head>\n<body>\n\n<script type=\"text/javascript\" src=\"./dist/mongodb-querybuilder.js\"></script>\n\n<script>\n// create query builder and point it to a mongodb instance and namespace\nvar builder = new QueryBuilder({seed: \"mongodb://localhost:10000\", namespace: \"xgen.jira\"});\n\n// call .match, .group, .agg and .limit functions as much as you want\n// QueryBuilder will store the state according to the given \"slot\" (first), overwrite\n// old values, and delete the slot if you pass in a value of null.\n\nbuilder\n    .match(\"fields.reporter.name\", [\"thomasr\", \"ramon.fernandez\", \"spencer\"])\n    .match(\"fields.components.name\", [\"Security\", \"Sharding\"]) \n    .match(\"changelog.total\", [0, 50])  // for numbers, specify min and max as array\n\n    // --- either use .group() / .agg()\n\n    .group(\"x-axis\", [\"fields.fixVersions.name\", \"fields.status\"])\n        .agg(\"y-axis\", \"$sum\", 1)\n        .agg(\"size\", \"$avg\", \"changelog.total\")\n        .agg(\"_ids\", \"$push\", \"_id\")\n\n    // --- or .pick(), but not both.\n\n    // .pick(\"x-axis\", \"fields.fixVersions.name\")\n    // .pick(\"y-axis\", \"changelog.total\")\n    // .pick(\"color\", \"fields.components.name\")\n\n    .sort(\"size\", -1)\n    .limit(5);\n\n// finally, call .end to send the aggregation pipeline and return the data\nbuilder.end(function (err, res) {\n    if (err) return console.log(\"ERROR\", err);\n    console.log(\"DATA\", JSON.stringify(res, null, '\\t'));\n});\n</script>\n\n</body>\n</html>\n\n```\n\n\n## API\n\n### QueryBuilder(options)\n\nConstructor to create a new QueryBuilder. Takes an `options` hash. The options are:\n\n| type      | values                                                            |\n|-----------|-------------------------------------------------------------------|\n| scope     | hostname/port of mongoscope, passed on to mongoscope-client       |\n| seed      | hostname/port of MongoDB database, passed on to mongoscope-client |\n| namespace | namespace to query against, in `database.collection` format       |\n| samples   | number of samples to create schema from                           |\n\n\n###### Example \n\n```js\nvar builder = new QueryBuilder({\n    scope: \"http://localhost:29017\",\n    seed:  \"mongodb://localhost:27017\",\n    namespace: \"foo.bar\",\n    samples: 500\n});\n```\n\n\n### match(field, value)\n\nSpecify a filter to be matched when querying for documents. This turns into the `$match` aggregation stage. The `value` parameter is interpreted differently depending on the type of `field`:\n\n| type     | values  |\n|----------|---------|\n| boolean  | `value` is expected to be a single value, either `true` or `false` |\n| number   | `value` is expected to be an array of 2 values [`min`, `max`]. If either of the values is `null` or `undefined`, the range is considered open on that side. |\n| date     | Same as number. Both `Date()` objects and strings can be provided. |\n| category | `value` is expected to be an array of possible values. If only one `value` is provided, the match is an equality match, if two or more values are provided, the stage is using `$in` to find the matches. |\n\nIf a `.match()` call on the same field is repeated, the value of that field is overwritten. Specifying a value of `null` or `undefined` removes the filter on this field. \n\nIf multiple `.match()` filters on different fields are specified, the resulting documents have to match *all* filters.\n\n\n###### Example \n```js\nbuilder\n    .match(\"user.lastName\", [\"Smith\", \"Miller\", \"Jones\"])      // match users with these last names\n    .match(\"user.age\", [18, 36])                               // match users with age between 18 and 36 (inclusive)\n    .match(\"user.created_date\", [\"04/16/2014\", \"05/31/2014\"])  // match users created between these dates\n```\n\n\n### group(name, field)\n\nGroup documents by their value of `field` and projects this value to a new field named `name`. MongoDB combines grouping and aggregating (or \"rolling up\" values) into a single `$group` stage. Therefore, a call to `.group()` is usually followed by one or more calls to `.agg()`.\n\n###### Example \n```js\nbuilder\n    .group(\"zip\", \"user.address.zip_code\")\n        .agg(\"count\", \"$sum\", 1)\n        .agg(\"average_age\", \"$avg\", \"user.age\")\n```\n\nThis example groups all documents by their `user.address.zip_code` field, and renames the field to `zip` in the process. For each group, the total number of documents is calculated as `count` and the average age of the users is calculated as `average_age`. The result could look like this:\n\n```json\n[\n    {\n        \"zip\": 10009, \n        \"count\": 1443,\n        \"average_age\": 27.84\n    }, \n    {\n        \"zip\": 10035, \n        \"count\": 2091,\n        \"average_age\": 33.20\n    }, \n    ...\n]\n```\n\n#### Multi-Field Groups\n\nYou can also group on multiple fields at once. The syntax is the same as above, but instead of a single `field` value, specify an array of values. The resulting groups cover all combinations of the compound group key.\n\nDue to a limitation of the aggregation framework around dot-notation keys (they can only appear at the top level), all dots are replaced with underscores in the resulting compound group key (e.g. `user_address_zip_code` instead of `user.address.zip_code`).\n\n###### Example\n\n```js\nbuilder\n    .group(\"key\", [\"user.address.zip_code\", \"user.gender\"])\n        .agg(\"count\", \"$sum\", 1)\n        .agg(\"average_age\", \"$avg\", \"user.age\")\n```\n\n```json\n[\n    {\n        \"count\": 23,\n        \"average_age\": 24.3,\n        \"key\": {\n            \"user_address_zip_code\": 18220,\n            \"user_gender\": \"male\"\n        }\n    },\n    {\n        \"count\": 19,\n        \"average_age\": 25.1,\n        \"key\": {\n            \"user_address_zip_code\": 18220,\n            \"user_gender\": \"female\"\n        }\n    },\n    ...\n```\n\n#### Nested Groups\n\n\n\n###### Example\n\n```js\nbuilder\n    .group(\"gender\", \"user.gender\")\n        .agg(\"total\", \"$sum\", \"count\")\n        .group(\"lastname\", \"user.name.last\")\n            .agg(\"count\", \"$sum\", 1)\n            .agg(\"average_age\", \"$avg\", \"user.age\")\n```\n\n\n \n### agg(name, agg_fn, field)\n\n### pick(name, field)\n\n### sort(field, direction)\n### limit(number)\n\n### end(callback)\n### pipeline()\n\n\n\n\n","readmeFilename":"README.md","users":{"ywadi":true}}