在 MongoDB Atlas 中不能使用“$search in $lookup result”吗?

Is it impossible to use "$search in $lookup result" in MongoDB Atlas?

我有一个名为 'crew'

的集合
{
    _id:
    name:
    description:
    person_id:
}

和名为 'person'

的集合
{
    _id:
    name:
    description:
}

我的目标是通过搜索 crew.name、crew.description 和 person.name 来制作推荐系统。

首先,我为每个集合创建索引(集合 > 搜索索引),然后按如下方式使用聚合。

db.crew.aggregate([
    {
        $lookup: {
            from: 'person',
            localField: 'person_id',
            foreignField: '_id',
            as: 'person_info'
            }
    }
    , {
        $unwind: {
            path: '$person_info'
        }
    }
    , {
        $project: {
            'crewId': '$_id',
            'crewName': '$name',
            'crewDescription': '$description',
            'personName': '$person_info.name'
        }
    }
    , {
        $search: {
            "text": {
                "query": "SEARCH_WORD",
                "path": ["crewName","crewDescription","personName"]
            }
        }
    }
])

结果我收到如下错误信息。

MongoError:$_internalSearchBetaMongotRemote 仅作为管道中的第一阶段有效。

在mongodb atalas 中不能使用“$search in $lookup result”吗?

是的,无法将 $search$lookup 一起使用。根据 documentation

$search must be the first stage of any pipeline it appears in. $search cannot be used in:

  • a view definition

  • a $lookup subpipeline

  • a $facet pipeline stage