MongoDB如何查询数组包含连续COMPLETED状态元素的文档
MongoDB 查询数组含相邻COMPLETED状态的文档
以下是直接可用的查询语句,无需额外聚合阶段即可匹配符合要求的文档:
db.collection.find({ $expr: { $gt: [ { $size: { $filter: { // 生成所有相邻元素对的首个元素下标 input: { $range: [0, { $subtract: [{ $size: "$activities" }, 1] }] }, cond: { $and: [ // 检查当前下标对应状态为COMPLETED { $eq: [{ $arrayElemAt: ["$activities.status", "$$this"] }, "COMPLETED"] }, // 检查下一个下标对应状态也为COMPLETED { $eq: [{ $arrayElemAt: ["$activities.status", { $add: ["$$this", 1] }] }, "COMPLETED"] } ] } } } }, // 只要存在至少一对符合要求的相邻元素就匹配 0 ] } })
边界情况适配
如果activities数组长度小于2,查询会自动跳过这类文档,不会误判。针对你给出的示例数据,该查询仅返回_id为some-long-id-1的文档,完全符合需求。
内容的提问来源于stack exchange,提问作者Rifat Bin Reza
相关产品推荐
相关产品推荐

