首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MongoDB如何对匹配条件进行添加自定义字段?

MongoDB如何对匹配条件进行添加自定义字段?

提问于 2021-01-09 14:06:11
回答 1关注 0查看 388

我有以下数据:

{
    "name" : "...",
    "suppiler" : [
                    {"name":"...."},
                    {"name":"...."},
                ],
    "administration" : [
                           {"name":"..."},
                           {"name":"..."},
                    ],
    ...
} 
我在做一个搜索类的查询,它可以匹配指定的一些字段,包括数组内的json字段,例如suppiler.name
db.base.aggregate([
   {"$match" : 
        {
            "$or" : 
            [
                {"name" : {"$regex" : key}}
                {"administration.name": {"$regex": key}},
                 {"suppiler.name": {"$regex": key}},
            ]
        }
    },
    {"$project":
        {"_id":false,
        "name":true,
        "__regx__":"被匹配的字段"
        }
    }
])
我想在自定义的__regx__字段内写入当前匹配到的是什么字段。
例如第一行:name被匹配,则设置"__regx__":"name"
MongoDB版本:4.2
我尝试过以下几种办法,都不能解决:
1、在"$project"内用"$switch"进行选择,然后用"$regexMatch"再次匹配后填入匹配的字段。
    {"$project":
        { "_id":...
          "__regx__":
          {
              "$switch":
              {
                  "branches":
                  [
                      {"case": {"$regexMatch":{"input":"$name","regex": key}},"then" : "name匹配"},
                      {"case": {"$regexMatch":{"input":"$suppiler.name","regex": key}},"then" : "supppiler.name匹配"},    
                  ],
                  "default":"..."
              }
          }
        }
    }
"$regexMatch"不能使用数组作为输入,没办法,我又试着下面的办法再去尝试。
2、打散数组再进行匹配:
[
{"$match" ...}
...
{"$unwind":"$suppiler"}
{"$project"...}
]
现在数组是打散了,但是,数组内有多少个成员就会多出多少条数据,这也不是我想要的。
以上,有没有什么办法,在"$project"内对数组的每个成员进行"$regexMatch"操作,或者"$indexOfCP"也可以。
或者说,有什么更好的办法可以得到每条数据对应的匹配条件。
相关文章

相似问题

相关问答用户
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档