amark / mongous

Simple MongoDB driver for Node.js with jQuery like syntax.
MIT License
246 stars 30 forks source link

Create / Drop index. #41

Closed ronen1malka closed 9 years ago

ronen1malka commented 9 years ago

Is it posible to create / drop /refresh index?

amark commented 9 years ago

Operations are done via the following syntax: db('blog.$cmd').find(command,1)

The list of available operations are here: http://docs.mongodb.org/manual/reference/command/

For example, dropping our 'users' collection from our 'blog' database is as simple as: db('blog.$cmd').find({drop:"users"},1).

However, doing things like creating or dropping indices gets ugly. MongoDB's command for this is listed here: http://docs.mongodb.org/manual/reference/command/createIndexes/#dbcmd.createIndexes . Currently mongous has no easy convenience wrapper (like .ensureIndex or .createIndex) so you have to do this manually:

$('blog.$cmd').find(1, {
  createIndexes: 'posts',
  indexes: [{
    key: {title: 1},
    name: 'blog_post_titles'
  }] }, function(result){ 
    console.log(result);
 }); 

Please see the above link for more details on the parameters. What this particular command is doing is creating an index on the 'posts' collection in the 'blog' database, where the key (or field) for the index is 'title' in ascending order (1). We give the index itself a name, called 'blog_post_titles'.

If we want to list what indices we have, we can run this command:

$('blog.$cmd').find(1, { listIndexes: 'posts' }, function(result){ 
    console.log(result);
});  

http://docs.mongodb.org/manual/reference/command/listIndexes/#dbcmd.listIndexes

If we want to drop the index we just created, we can do this:

$('blog.$cmd').find(1, {dropIndexes: 'posts', index: "blog_post_titles"}, function(result){
    console.log(result) 
});   

http://docs.mongodb.org/manual/reference/command/dropIndexes/#dbcmd.dropIndexes

Hopefully this satisfies your question - does it? Please let me know. I would love a contribution where you take this ugly code and wrap it into a convenience/utility function (called createIndex and dropIndex or something like that) which makes it easier for developers! It should be super simple.

My final remarks is that I need help and contribution with this, because while I love MongoDB (I've used it for 5 years) I have stopped using it and am building my own database (http://github.com/amark/gun), an open source version of Firebase, But people are still actively using this library, mongous, and I'm sure they'd really appreciate you adding simplicity features to it!

Let me know your thoughts.