Database

db={"A":[{index:"1",time:"10:30:00",value:12},{index:"2",time:"10:30:20",value:11},{index:"1",time:"10:30:32",value:15},{index:"2",time:"10:31:05",value:13},{index:"1",time:"10:31:40",value:14},{index:"2",time:"10:31:43",value:10}],"B":[{index:"1",time:"10:30:10",cost:10},{index:"2",time:"10:30:15",cost:12},{index:"1",time:"10:30:30",cost:8},{index:"2",time:"10:30:50",cost:9},{index:"1",time:"10:31:10",cost:10},{index:"2",time:"10:31:23",cost:11}]}

Query

db.A.aggregate([{$graphLookup:{from:"A",startWith:"$index",connectFromField:"index",connectToField:"index",as:"range"}},{$addFields:{range:{$reduce:{input:"$range",initialValue:{index:"$index",time:"23:59:59",value:0},in:{$cond:[{$and:[{$ne:["$_id","$$this._id"]},{$gt:["$$this.time","$time"]},{$lt:["$$this.time","$$value.time"]}]},"$$this","$$value"]}}}}},{$lookup:{from:"B",let:{index:"$index",start:"$time",end:"$range.time"},pipeline:[{$match:{$expr:{$and:[{$eq:["$$index","$index"]},{$and:[{$gt:["$time","$$start"]},{$lt:["$time","$$end"]}]}]}}}],as:"linked"}},{$project:{_id:0,index:1,value:1,totalCost:{$sum:"$linked.cost"}}},{$sort:{index:1,value:1}}])

Result