具有取自字段值 [MongoDB] 的可变模式的正则表达式
regex with variable pattern taken from value of a field [MongoDB]
假设我有一些这种形状的文档:
[
{
name: "Name1",
surname: "Surname1",
fullName: "Name1 Surnmame1"
},
{
name: "Name2",
surname: "Surname2",
fullName: "Name2 Surnmame2"
},
// I would like to detect this one where name and name inside fullName do not match
{
name: "Name3",
surname: "Surname3",
fullName: "Name1 Surnmame3"
}
]
并且fullName
是一个计算字段。
理想情况下,我想检测 name
不属于 fullName
的文档。这可能是由于计算部分的一些错误实现造成的。
我希望像下面这样的东西至少可以确定哪些 name/fullname 确实匹配(与我正在尝试做的相反):
db.people.find({"fullName": /"$name"/});
但是,这会搜索 $name
而不是字段 name
在同一文档中保存的值。知道如何实现吗?
注意: 我尝试 运行 针对 DocumentDB (v3.6.0),但如果您对 MongoDB 有任何建议,它也可以工作.
您可以使用 $indexOfCP
检查 name
是否在 fullName
中。如果子字符串不存在,$indexOfCP
将 return -1.
根据 official AWS documentDB document,您的 v3.6 数据库应该支持 $indexOfCP
。
db.collection.aggregate([
{
$addFields: {
idx: {
"$indexOfCP": [
"$fullName",
"$name"
]
}
}
},
{
"$match": {
idx: -1
}
}
])
这是Mongo playground供您参考。
假设我有一些这种形状的文档:
[
{
name: "Name1",
surname: "Surname1",
fullName: "Name1 Surnmame1"
},
{
name: "Name2",
surname: "Surname2",
fullName: "Name2 Surnmame2"
},
// I would like to detect this one where name and name inside fullName do not match
{
name: "Name3",
surname: "Surname3",
fullName: "Name1 Surnmame3"
}
]
并且fullName
是一个计算字段。
理想情况下,我想检测 name
不属于 fullName
的文档。这可能是由于计算部分的一些错误实现造成的。
我希望像下面这样的东西至少可以确定哪些 name/fullname 确实匹配(与我正在尝试做的相反):
db.people.find({"fullName": /"$name"/});
但是,这会搜索 $name
而不是字段 name
在同一文档中保存的值。知道如何实现吗?
注意: 我尝试 运行 针对 DocumentDB (v3.6.0),但如果您对 MongoDB 有任何建议,它也可以工作.
您可以使用 $indexOfCP
检查 name
是否在 fullName
中。如果子字符串不存在,$indexOfCP
将 return -1.
根据 official AWS documentDB document,您的 v3.6 数据库应该支持 $indexOfCP
。
db.collection.aggregate([
{
$addFields: {
idx: {
"$indexOfCP": [
"$fullName",
"$name"
]
}
}
},
{
"$match": {
idx: -1
}
}
])
这是Mongo playground供您参考。