如何解决没有通用值的Mongo DB $ lookup
我是MongoDb的新手,正在尝试加入两个没有共同价值的集合。
我有两个收藏夹。
collection 1 : Role
Fields : Role,UserName
collection 2 :mysite
Fields : userName,userEmail
在集合1中: 例如:
{
'Role' :"admin"
'UserName' : "abc.efg"
}
在集合2中: 例如:
{
'userName' : "abc Mr,efg"
'userEmail' : "abc.efg@company.com"
}
用户名的值格式不同,所以我正在寻找一种方法来加入这两个集合。
请问有什么方法可以合并这两个集合。
请对此提供帮助。
解决方法
要在两个集合之间执行不相关的子查询并允许除单个相等匹配之外的其他联接条件,$lookup阶段具有以下语法:
{
$lookup:
{
from: <collection to join>,let: { <var_1>: <expression>,…,<var_n>: <expression> },pipeline: [ <pipeline to execute on the collection to join> ],as: <output array field>
}
}
您可以使用上面的$ lookup语法使用以下聚合查询:
db.Role.aggregate([
{
"$lookup": {
"from": "mysite",let: {
"userName": "$UserName"
},"pipeline": [
{
$match: {
"$expr": {
"$ne": [
{
"$indexOfCP": [
"$userEmail","$$userName"
]
},-1
]
}
}
}
],"as": "mysite"
}
},{
"$unwind": "$mysite"
},])
$indexOfCP在字符串中搜索子字符串的出现,并返回第一次出现的索引。如果未找到子字符串,则返回-1。
因此,在接下来的阶段中,它将检查UserName
中是否存在userEmail
子字符串,如果不存在则返回-1,如果存在则返回子字符串所在的索引。
因此使用expr $ne -1
,它将匹配UserName
中包含userEmail
子字符串的所有文档,而忽略不存在给定子字符串的文档。
{
$match: {
"$expr": {
"$ne": [
{
"$indexOfCP": [
"$userEmail",-1
]
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。