我还有一个关于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
。因此,您可以创建一个新字段来存储找到索引的位置。
创建两个字段(例如existsFirstname
和existsLastname
(,如果两者都不同于-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
}
}
])
示例