如何查询MongoDB的字段值是否以字符串形式出现在另一个字段值中



我还有一个关于Mongo DB查询的问题。我的收藏看起来像这样,例如:

{"$firstname": 'Max',
"$lastname": 'Mustermann',
"$content": 'Max Mustermann leidet unter Kopfschmerzen'}
{"$firstname": 'Marina',
"$lastname": 'Musterfrau',
"$content": 'Patientin leidet unter Kopfschmerzen'}

现在我想查询$content,其中$firstname$$lastnamecontent中,这只会给我Max Mustermann的集合。

背景是,我需要从$content中收集文本数据,并检查其中是否有合理的数据,如姓名、生日或类似的数据。如果它确实包含合理的数据,有没有办法匿名化文本的这些部分?如果不是,我只会把那些查询为真的地方排除在外,例如$content包含合理的数据。非常感谢你的帮助!

您可以使用$indexOfCP使用技巧。

如果未找到子字符串,此运算符将返回-1。因此,您可以创建一个新字段来存储找到索引的位置。

创建两个字段(例如existsFirstnameexistsLastname(,如果两者都不同于-1,则意味着两个子字符串都存在于$content值中。

您可以使用聚合来使用此查询。

添加新字段的第一阶段:

  • existsFirstname:使用$indexOfCP$firstname值搜索到$content
  • CCD_ 11做同样的事情,但是使用CCD_

第二阶段匹配最后两个字段不同于-1的文档(即两个字段都存在于$content中(

将值删除到输出中的第三阶段。

db.collection.aggregate([
{
"$addFields": {
"existsFirstname": { "$indexOfCP": [ "$content", "$firstname" ] },
"existsLastname": { "$indexOfCP": [ "$content", "$lastname" ] }
}
},
{
"$match": {
"$and": [ 
{ "existsFirstname": { "$ne": -1 } }, 
{ "existsLastname": { "$ne": -1 } } ]
}
},
{
"$project": {
"existsFirstname": 0,
"existsLastname": 0
}
}
])

示例

最新更新