gpt4 book ai didi

MongoDB 搜索索引中的缺口

转载 作者:行者123 更新时间:2023-12-02 00:38:08 24 4
gpt4 key购买 nike

我正在缓存来自在线资源的数据,以备将来在机器学习中使用。此数据是规范的,没有缺失的条目。

如果实时连接断开或机器重新启动,我有一个保护措施可以对缓存中丢失的一系列 ID 进行历史搜索。

但是,我还没有实现的是一种用于搜索集合并识别已跳过 id 值的范围的机制。

例如:

{"entry_id": 27497713, ...}
{"entry_id": 27497761, ...}

此数据在 2749771327497761 之间存在明显的缺失条目。

有没有一种方法可以使用查询找到这样的差距?也许至少通过选择两个范围之间的值并检查返回条目的数量来缩小范围?鉴于集合包含多少条目,我试图避免大量查询以提高效率。

最佳答案

你能试试这个聚合吗

  1. $group - 获取$min$max
  2. $addFields - 通过$min$max entry_id 生成$range >
  3. $lookup - 使用生成的范围 ID 和条目 ID 进行 self 查找
  4. $project - 使用 setDifference
  5. 仅获取不匹配的范围 ID

流水线

db.entries.aggregate(
[
{$group : {_id : null, min : {$min : "$entry_id"}, max : {$max : "$entry_id"}}},
{$addFields : {rangeIds : {$range : ["$min", "$max"]}}},
{$lookup : {from : "entries", localField : "rangeIds", foreignField : "entry_id", as : "entries"}},
{$project : {_id :0, missingIds : {$setDifference : ["$rangeIds", "$entries.entry_id"]}}}
]
)

收藏

> db.entries.find()
{ "_id" : ObjectId("5a6fea9b7346ce591a17ad22"), "entry_id" : 27497713 }
{ "_id" : ObjectId("5a6fea9b7346ce591a17ad23"), "entry_id" : 27497761 }
{ "_id" : ObjectId("5a6fea9b7346ce591a17ad24"), "entry_id" : 27497750 }
>

综合结果

> db.entries.aggregate( [ {$group : {_id : null, min : {$min : "$entry_id"}, max : {$max : "$entry_id"}}}, {$addFields : {rangeIds : {$range : ["$min", "$max"]}}}, {$lookup : {from : "entries", localField : "rangeIds", foreignField : "entry_id", as : "entries"}}, {$project : {_id :0, missingIds : {$setDifference : ["$rangeIds", "$entries.entry_id"]}}} ] )
{ "missingIds" : [ 27497714, 27497715, 27497716, 27497717, 27497718, 27497719, 27497720, 27497721, 27497722, 27497723, 27497724, 27497725, 27497726, 27497727, 27497728, 27497729, 27497730, 27497731, 27497732, 27497733, 27497734, 27497735, 27497736, 27497737, 27497738, 27497739, 27497740, 27497741, 27497742, 27497743, 27497744, 27497745, 27497746, 27497747, 27497748, 27497749, 27497751, 27497752, 27497753, 27497754, 27497755, 27497756, 27497757, 27497758, 27497759, 27497760 ] }
>

关于MongoDB 搜索索引中的缺口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48511015/

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