Mongodb 查询根据字段值的长度过滤文档

Mongodb Query to filter documents based on the length of a field value

我正在 python 中编写 AWS lambda 代码。我的数据库是 AWS DocumentDB。我用的是pymongo。

这个代码片段工作正常 query = {"media_id": {"$exists": True}} collection.find(query)

但是returns很多记录,所以我想获取media_id字段长度小于3的记录。

为此,我尝试了这个查询 query = { "media_id": {"$exists": True}, "$expr: {"$lt": [{"$strLenCP": "$media_id"}, 3]},},但我得到了

Feature not supported Error

因为 DocumentDB 不支持 $expr。 我正在寻找适用于 DocumentDB 的查询。

解决方案可能看起来有点繁琐,但是根据official doc

应该支持里面的所有操作

使用聚合投影辅助字段来存储 media_id 的长度,然后根据您的条件进行匹配。

db.collection.aggregate([
  {
    $addFields: {
      length: {
        "$strLenCP": "$media_id"
      }
    }
  },
  {
    $match: {
      media_id: {
        $exists: true
      },
      length: {
        $gte: 3
      }
    }
  },
  {
    "$project": {
      length: false
    }
  }
])