我将数据存储在MongoDB中,如下所示:

{
    "payouts": {
      "entries": [
        {
          "custom_payout_overwrite": false,
          "entry_name": "",
          "network_custom_payout_revenue_setting_id": 0,
          "network_offer_payout_revenue_id": 1,
          "payout_amount": 0.44,
          "payout_percentage": 0,
          "payout_type": "cpa"
        }
      ],
      "total": 1
    }
}


我只想获取payout_amount大于0的数据。

我已经尝试过

filter_by = {"payouts.entries.payout_amount": {"$gte": 0}}
data = db[collection_name].find(filter_by)


但是我猜这没用。这是因为条目是一个列表,我不确定如何在列表中进一步查询。谢谢。

最佳答案

您可以使用$elemMatch

filter_by = {'payouts.entries': {'$elemMatch': {'payout_amount': {'$gte': 0}}}}
data = db[collection_name].find(filter_by)


关于$elemMatch使用情况的文档为here

另请注意:要仅获取payout_amount大于0的数据,应使用$gt(而不是$gte):

filter_by = {'payouts.entries': {'$elemMatch': {'payout_amount': {'$gt': 0}}}}

10-02 19:11