अंतराल का पता लगाने के लिए आपको लगातार दस्तावेज़ों के जोड़े प्राप्त करने की आवश्यकता है। उसके लिए आप सभी दस्तावेज़ों को एकल सरणी में धकेल सकते हैं, और zip इसने अपने आप सिर से 1 तत्व को स्थानांतरित कर दिया:
db.collection.aggregate([
{ $sort: { day: 1 } },
{ $group: { _id: null, docs: { $push: "$$ROOT" } } },
{ $project: {
pair: { $zip: {
inputs:[ { $concatArrays: [ [false], "$docs" ] }, "$docs" ]
} }
} },
{ $unwind: "$pair" },
{ $project: {
prev: { $arrayElemAt: [ "$pair", 0 ] },
next: { $arrayElemAt: [ "$pair", 1 ] }
} },
{ $match: {
$expr: { $ne: ["$prev.value", "$next.value"] }
} },
{ $replaceRoot:{ newRoot: "$next" } }
])
बाकी मामूली है - आप दस्तावेज़ों में वापस सरणी खोल सकते हैं, जोड़ियों की तुलना कर सकते हैं, बराबर वाले को फ़िल्टर कर सकते हैं, और रूट को बदलें जो बचा है उसमें से।