You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何筛选满足arr_object特定isPaymentCompleted条件的记录ID

解决方案

MongoDB 查询语句

db.collection.find(
  {
    $expr: {
      $and: [
        // 确保数组至少包含一个元素
        { $gte: [{ $size: "$arr_object" }, 1] },
        // 验证最后一个元素的isPaymentCompleted为false
        { $eq: [{ $arrayElemAt: ["$arr_object.isPaymentCompleted", -1] }, false] },
        // 验证除最后一个外的所有元素isPaymentCompleted均为true
        {
          $allElementsTrue: {
            $map: {
              input: { $slice: ["$arr_object", 0, { $subtract: [{ $size: "$arr_object" }, 1] }] },
              as: "item",
              in: "$$item.isPaymentCompleted"
            }
          }
        }
      ]
    }
  },
  { _id: 1 } // 仅返回记录ID
)

PostgreSQL 查询语句(假设arr_object类型为jsonb)

SELECT id
FROM your_table
WHERE
  -- 确保数组至少包含一个元素
  jsonb_array_length(arr_object) >= 1
  -- 验证最后一个元素的isPaymentCompleted为false
  AND (arr_object -> (jsonb_array_length(arr_object) - 1) ->> 'isPaymentCompleted')::boolean = false
  -- 验证除最后一个外无isPaymentCompleted为false的元素
  AND NOT EXISTS (
    SELECT 1
    FROM jsonb_array_elements(arr_object) WITH ORDINALITY AS elem(item, idx)
    WHERE idx < jsonb_array_length(arr_object)
      AND (item ->> 'isPaymentCompleted')::boolean = false
  );

核心逻辑说明

无论使用哪种数据库,筛选逻辑都围绕两点:

  • 确认数组最后一个元素的isPaymentCompleted为false
  • 确认数组中除最后一个元素外,所有元素的isPaymentCompleted均为true

内容的提问来源于stack exchange,提问作者Narayan Maity

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 04:22:03