多字段的MongoDB聚合查询

多字段的MongoDB聚合查询,mongodb,mongodb-query,aggregation-framework,mern,Mongodb,Mongodb Query,Aggregation Framework,Mern,首先让我解释一下情况。我做了高级搜索,用于搜索帖子和个人资料。我已经做了开关按钮,显示后搜索或个人资料搜索。收到服务器上的所有详细信息后。我提出这个问题: await Profile.aggregate([ { $match: { $or: [ {"company": {$regex: profile.company}}, {"skills":

首先让我解释一下情况。我做了高级搜索,用于搜索帖子和个人资料。我已经做了开关按钮,显示后搜索或个人资料搜索。收到服务器上的所有详细信息后。我提出这个问题:

await Profile.aggregate([
    {
        $match: {
            $or: [
                {"company": {$regex: profile.company}},
                {"skills": {$all: profile.skills}},
                {"experience.company" :{$in: [ profile.experience.company]}}
            ]
        }
    },
    {
        $skip: req.params.page ? req.params.page - 1 : 0 // make sure this can't be -1
    },
    {
        $limit: 11
    },
    {
        $lookup: {
            from: "user",
            localField: "user",
            foreignField: "_id",
            as: "user"
        }
    },
    {
        "$unwind": "$user"
    }
])
但假设company未定义,并给出以下错误$regex必须是字符串。如何搜索已定义或不是空字符串的字段?此外,我不确定这段代码是否正确:

{"experience.company" :{$in: [ profile.experience.company]}}

下一个问题是如何同时搜索user.name公司和技能?我应该先查找然后匹配吗?(很抱歉问这个问题,但我是MongoDB新手)

为了防止比较
未定义的
字段时出现
$regex
错误,您可以在开头过滤字段

示例:

db.collection.aggregate([
{
$match:{
公司:{
$exists:true
}
}
}
])
“下一个问题是如何同时搜索user.name公司和技能?”


一次可以在一个聚合管道中完成。那没关系。但是,将哪个查询放在管道的开头取决于您的数据结构和您要查找的内容。

您好!我可以请你给我一个关于$exists的代码示例(与矿区公司技能…)。假设我有一个包含公司和技能的个人资料集合,以及包含姓名的用户集合,我想将搜索查询与之进行比较,如果这3个集合中的任何一个匹配,我想返回。还有没有任何可能的方法来计算它们,这样我就可以返回按最佳匹配排序的它们,然后越来越少,这是有效的代码:
{“experience.company”:{$in:[profile.experience.company]}
,因为返回所有的配置文件(将它们全部匹配或类似的内容)谢谢!