作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在尝试存储大量双重链接的文档,即它们可以有前任和后继。由于存在不同文档的集合,我不确定是否可以在其上创建可行的索引:
{"_id": "1234", "title": "Document1", "content":"...", "next": "1236"}
{"_id": "1235", "title": "Document2", "content":"...", "next": "1238"}
{"_id": "1236", "title": "Document1a", "content":"...", "prev": "1234"}
{"_id": "1237", "title": "Document2a", "content":"...", "prev": "1235", "next": "1238"}
{"_id": "1238", "title": "Document2b", "content":"...", "prev": "1237", "next": "1239"}
...
由于我需要一个文档的整个“历史”,包括上一个和下一个文档,我想我必须根据列表的大小执行大量查询?
关于如何创建高性能索引有什么建议吗?存储双链表的不同结构也会很有趣。
最佳答案
如果你想优化阅读,你可以使用数组来存储上一个和下一个文档。
{
"_id": "1237",
"title": "Document1",
"content":"...",
"next": "1238",
"prev": "1235",
"parents" : [1000, 1235]
"children" : [1238, 1239]
}
然后您可以获取您的 _id 位于子数组或父数组中的所有文档。如果您只需要文档的父级或子级,则此解决方案很好。要获得完整的列表,您不能有效地使用带有 $or 和两个 $in 运算符的索引。
另一种可能更好的解决方案是将每个文档的整个列表(即 child 和 parent )存储在一个数组中:
{
"_id": "1237",
"title": "Document1",
"content":"...",
"next": "1238",
"prev": "1235",
"list_ids" : [1000, 1235, 1238, 1239, 1237]
}
这样你就可以在 list_ids
上建立一个索引,并通过一个简单的 $in 快速查询来获取所有文档。
这两种解决方案的问题是,当您添加新文档时,您需要更新所有相关文档。因此,如果您是将有一个写繁重的应用程序。
关于mongodb - 如何在 MongoDB 中创建(双)链表结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19701556/
我是一名优秀的程序员,十分优秀!