MongoDB - 获取文档最新版本的最有效方法

sam*_*tin 2 mongodb nosql

我正在使用MongoDB来保存一组文档.

每个文档都有一个_id(版本),它是一个ObjectId.每个文档都有一个documentId,它在不同版本之间共享.这也是在创建第一个文档时分配的OjectId.

在给出documentId的情况下,找到最新版本文档的最有效方法是什么?

即我想得到_id = max(_id)和documentId = x的记录

我需要使用MapReduce吗?

提前致谢,

山姆

Dai*_*mon 6

添加包含两个字段的索引(documentId,_id)并且不使用max(what for)?使用documentId = x查询,按_id命令DESC,限制(1)结果获取最新信息.记住索引的正确排序顺序(DESC也)

这样的事情

db.collection.find({documentId : "x"}).sort({_id : -1}).limit(1)
Run Code Online (Sandbox Code Playgroud)

其他方法(更加非规范化)将使用其他集合与文档,如:

{
    documentId : "x",
    latestVersionId : ...
}
Run Code Online (Sandbox Code Playgroud)

使用原子操作可以安全地更新此集合.添加适当的索引会使查询快速闪电.

有一点需要考虑 - 我不确定ObjectID是否总是可以安全地用于订购最新版本.使用时间戳可能是更确定的方法.