mongo: "2d" index and normal index

location: {lat: Number,
           lng: Number}

location is a 2d index in my mongodb and I have been using this for geospatial search, which is working fine.

Now if I need to search as db.find({lat:12.121212, lng:70.707070}), will it use the same index ? or, do I need to define a new index ? If so, how ?

I am using mongoose driver in node.js

The 2d index used for doing the geospatial commands is not going to help for an equivalency match on the two fields. For that you will need to define a compound index on the two sub-documents, something like this:

db.collection.ensureIndex({"location.lat" : 1, "location.lng" : 1})

This worked best for me with a test set of data - you can also define a normal index on the location field itself but that will be less efficient. You can test out the relative performance using hint and explain for any index combination. For example:

db.collection.find({"location.lat" : 179.45, "location.lng" : 90.23}).hint("location.lat_1_location.lng_1").explain()

You can do this for any index you wish in fact, though to check the results returned you will need to drop the .explain()

Please also bear in mind that a query can only use one index at a time, so if you are looking to combine the two (equivalency and a geospatial search) then the 2d index will be the only one used.

Note: all of the above examples are from the MongoDB JS shell, not node.js