我想使用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
逐渐对结果进行排序。
答案 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进程。