Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Mongodb set _id as decreasing index

I want to use mongodb's default _id but in decreasing order. I want to store posts and want to get the latest posts at the start when I use find(). I am using mongoose. I tried with

postSchema.index({_id:-1})

but it didn't work

> db.posts.getIndexes()
  [
{
    "v" : 1,
    "key" : {
        "_id" : 1
    },
    "name" : "_id_",
    "ns" : "mean-dev.posts"
}]

I dropped the database and restarted mongod. No luck with that. Is there any way to set _id as a decreasing index at the sametime using mongodb's default index? I don't want to use sort() to sort the result according to _id decreasingly.

like image 463
ma08 Avatar asked Jun 30 '14 10:06

ma08


People also ask

Can we drop _ID index in MongoDB?

MongoDB creates a unique index on the _id field during the creation of a collection. The _id index prevents clients from inserting two documents with the same value for the _id field. You cannot drop this index on the _id field.

How do you create an index in descending order in MongoDB?

For an ascending index on a field, specify a value of 1 ; for descending index, specify a value of -1 . Starting in 3.6, you cannot specify * as the index name. MongoDB supports several different index types including text, geospatial, and hashed indexes.

How do I change an existing index in MongoDB?

To modify an existing index in the MongoDB Shell, you need to drop and recreate the index. The exception to this rule is TTL indexes, which can be modified via the collMod command in conjunction with the index collection flag.


1 Answers

Short answer

You cannot a descending index on _id field. You also don't need it. Mongo will use the existing default index when doing a descending sort on the _id field.

Long answer

As stated in the documentation MongoDB index on _id field is created automatically as an ascending unique index and you can't remove it.

You also don't need to create an additional descending index on _id field because MongoDB can use the default index for sorting.

To verify that MongoDB is using index for your sorting you can use explain command:

db.coll.find().sort({_id : -1}).explain();

In the output explain command, the relevant part is

"cursor" : "BtreeCursor _id_ reverse"

which means that MongoDB is using index for sorting your query in reverse order.

like image 149
Christian P Avatar answered Oct 16 '22 18:10

Christian P