gpt4 book ai didi

mongodb - 如何在 MongoDB 中创建(双)链表结构?

转载 作者:IT老高 更新时间:2023-10-28 13:35:34 25 4
gpt4 key购买 nike

我正在尝试存储大量双重链接的文档,即它们可以有前任和后继。由于存在不同文档的集合,我不确定是否可以在其上创建可行的索引:

{"_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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com