Mongodb将_id设置为递减指数

时间:2014-06-30 10:34:15

标签: mongodb indexing mongoose

我想使用mongodb的默认_id但是按降序排列。我想存储帖子,并希望在使用find()时获取最新帖子。我正在使用猫鼬。我试过

postSchema.index({_id:-1})

但它没有工作

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

我删除了数据库并重新启动了mongod。没有运气。 有没有办法使用mongodb的默认索引在同一时间将_id设置为递减索引?我不想使用sort()根据_id逐渐对结果进行排序。

2 个答案:

答案 0 :(得分:7)

简短回答

不,您无法在_id字段上创建降序索引。您也无法删除它以将其重新创建为降序索引。 Mongo将在_id字段上执行降序排序时使用默认索引。

答案很长

documentation中所述,_id字段上的MongoDB索引会自动创建为升序唯一索引,您无法将其删除。

您也不需要在_id字段上创建额外的降序索引,因为MongoDB可以使用默认索引进行排序。

要验证MongoDB是否使用索引进行排序,可以使用explain命令:

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

在output explain命令中,相关部分是

"cursor" : "BtreeCursor _id_ reverse"

这意味着MongoDB使用索引以相反的顺序对查询进行排序。

答案 1 :(得分:0)

实际上你可以使用这个索引,只需在查询结尾处输入.sort({“_ id”: - 1})

ObjectId值不代表严格的广告订单。

来自文档:http://docs.mongodb.org/manual/reference/object-id/

  

重要事项ObjectId值的顺序与之间的关系   生成时间在一秒钟内并不严格。如果多个   系统,或单个系统上的多个进程或线程生成   价值,在一秒钟内; ObjectId值不代表a   严格的插入顺序。客户端之间的时钟偏差也可能导致   因为客户端驱动程序生成,所以即使是值也不严格排序   ObjectId值,而不是mongod进程。

相关问题