gpt4 book ai didi

javascript - 从 mongodb 游标中检索每个第 x 个元素的有效方法

转载 作者:行者123 更新时间:2023-12-03 02:52:18 26 4
gpt4 key购买 nike

我收集了大约 500 万份文档,而且还在不断增加。所有这些文档都有一个位置字段。位置字段上也有一个索引。这些文档显示在 map 上。当我放大时,我仅检索具有限制的查看区域范围内的点。缩小时,我想显示 x 点,但不是全部显示在一个区域中( x 比总集合小很多)。我想实现类似从数据库返回每 20 个元素的功能,因此我在每个区域都得到了点,这在高缩放级别下应该是一个很好的概述。我现在有了类似的东西并且它可以工作,但是它不是很快,因为我正在迭代其中的每个项目。

 let itemCount = 0;
let someItems = [];
cursor.forEach((item) => {
if (!(++itemCount % 20)) someItems.push(item);
}, (err) => {
if (err) throw err;
res.json(someItems);
});

当前的实现大约需要 5 秒,在我看来,这对于用户来说等待的时间太长了。有没有类似跳过光标项目的功能?我已经阅读了有关光标使用的批处理的信息。如果batchSize 是20,我可以只取每批的第一个项目。不过,我还没有找到手动检索下一批的方法。提高此操作速度的好方法是什么?

PS。我正在使用 Node.js MongoDB native 驱动程序。

最佳答案

您可以使用类似于随机跳过列表的东西。基本上每次插入这样的项目时,都会随机为其分配一个“可见性”,可见性越高,具有该可见性的项目就越少。

例如,您可以使用visibility = Floor(log2(random(2^10)))

假设您最终得到了一系列如下文档:

{
"name": "apple",
"visibility": 0,
},
{
"name": "orange",
"visibility": 0,
},
{
"name": "banana",
"visibility": 1,
},
{
"name": "mango",
"visibility": 2,
},

然后,您可以设计索引并根据位置和可见性执行查询。增加查询中的最小可见性以使返回的项目更加稀疏。

关于javascript - 从 mongodb 游标中检索每个第 x 个元素的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47791778/

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