我有一个包含一组文档的 MongoDB 集合。每个文档都有一个 ISODatedate
和一个整数id
(不是_id
)。如果集合中存在具有字段值的文档,则称id: X
其存在。因此,例如:date: D
{ id: X, date: D }
{ id: 1, date: 1/1/2000 }
{ id: 1, date: 1/2/2000 }
{ id: 1, date: 1/3/2000 }
{ id: 1, date: 1/4/2000 }
{ id: 2, date: 1/2/2000 }
{ id: 2, date: 1/3/2000 }
{ id: 3, date: 1/3/2000 }
我想id
随着时间的推移跟踪 s,因为它们每天被创建和销毁。使用上述数据,在 2000 年 1 月 1 日至 2000 年 1 月 4 日的日期范围内:
1/1/2000: id 1 is created
1/2/2000: id 2 is created
1/3/2000: id 3 is created
1/4/2000: id 2 is destroyed
1/4/2000: id 3 is destroyed
我认为解决这个问题的最好方法是每天循环,看看id
今天和第二天之间存在什么,并执行一组差异。例如,要获取 2000 年 1 月 2 日创建和销毁的 id 集,我需要在任一天的数组之间执行两个集差异:
var A = [ <ids that exist on 1/1/2000> ];
var B = [ <ids that exist on 1/2/2000> ];
var created_set = set_difference(B, A); // Those in B and not in A
var destroyed_set = set_difference(A, B); // Those in A and not in B
我可以使用find()
命令来获取A
and的游标B
,但我不知道如何set_difference
在两个游标之间执行。
我的另一个选择是使用聚合管道,但我无法考虑如何以我可以使用$setDifference
运算符的方式来制定管道。
作为一名 MongoDB 新手,我确信我正在以错误的方式思考这个问题。当然,这是可以做到的吗?我错过了什么?