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
}
}
])
我正在 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
}
}
])