在 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
我有一个名为 '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