我正在使用MongoDB来保存一组文档.
每个文档都有一个_id(版本),它是一个ObjectId.每个文档都有一个documentId,它在不同版本之间共享.这也是在创建第一个文档时分配的OjectId.
在给出documentId的情况下,找到最新版本文档的最有效方法是什么?
即我想得到_id = max(_id)和documentId = x的记录
我需要使用MapReduce吗?
提前致谢,
山姆
添加包含两个字段的索引(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是否总是可以安全地用于订购最新版本.使用时间戳可能是更确定的方法.
| 归档时间: |
|
| 查看次数: |
2845 次 |
| 最近记录: |