gpt4 book ai didi

mongodb - MongoDB 上的历史数据结构

转载 作者:可可西里 更新时间:2023-11-01 10:40:07 25 4
gpt4 key购买 nike

基于一定的时间间隔,我需要基于以下模型实现预聚合统计数据:

我有一个 Product 实体和一个 ProductGroup 实体,它们扮演着 Products 容器的角色。我可以有 0..N 个产品和 0..N 个产品组,产品和产品组之间具有 MANY_2_MANY 关系。

基于一些自己的业务逻辑,我可以计算每个 ProductGroup 中每个 Product 的顺序。

我将在一段时间内连续进行此计算...假设通过 Cron 作业。

我还想存储每次计算(版本)的历史记录,以便能够分析 Product 位置变化。

我用这种结构创建了一个简单的图片:

enter image description here

现在我使用 MongoDB 数据库,并且非常有兴趣在不引入新技术的情况下在 MongoDB 上实现这种结构。

我的功能需求 - 我需要能够快速获取特定 ProductGroup 中特定 Product 的位置(和位置偏移量)。假设 ProductGroup1P2 位置和偏移量。输出应该是:

position: 1
offset : +2

另外,我想可视化图形并显示特定产品组的特定产品的历史仓位变化。例如,对于 ProductGroup1 中的产品 P2,输出应为:

1(+2), 3(-3), 0

是否可以使用 MongoDB 来实现?如果可以,您能否描述一下 MongoDB 集合结构以支持这一点?

最佳答案

由于唯一的限制是“按照我在问题中的描述快速查询数据”,最简单的方法是拥有一组包含产品数组的快照:

db.snapshots.insert({
group: "group 1",
products:[
{id:"P2", position:0, offset:0},
{id:"P4", position:1, offset:0},
{id:"P5", position:2, offset:0},
{id:"P6", position:3, offset:0}
], ver:0
});

db.snapshots.insert({
group: "group 1",
products:[
{id:"P3", position:0, offset:0},
{id:"P5", position:1, offset:1},
{id:"P1", position:2, offset:0},
{id:"P2", position:3, offset:-3},
{id:"P4", position:4, offset:0}
], ver:1
});

索引是

db.snapshots.createIndex(
{ group: 1, ver: -1, "products.id": 1 },
{ unique: true, partialFilterExpression: { "products.id": { $exists: true } } }
);

以及获取产品在组中的当前位置的查询(示例中“组 1”中的“P4”):

db.snapshots.find(
{ group: "group 1" },
{ _id: 0, products: { $elemMatch: { id: "P4" } } }
).sort( { ver:-1 } ).limit(1)

获取历史数据的查询几乎相同:

db.snapshots.find(
{ group: "group 1" },
{ _id: 0, products: { $elemMatch: {id: "P4" } }, ver: 1 }
).sort({ver:-1})

关于mongodb - MongoDB 上的历史数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47411568/

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