Saya punya koleksi bernama 'kru'

{
    _id:
    name:
    description:
    person_id:
}

Dan koleksi bernama 'orang'

{
    _id:
    name:
    description:
}

Tujuan saya adalah membuat sistem rekomendasi dengan mencari crew.name, crew.description dan person.name.

Pertama, saya membuat indeks untuk setiap koleksi ( koleksi > indeks pencarian ), dan saya menggunakan agregat sebagai berikut.

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"]
            }
        }
    }
])

Sebagai hasilnya saya mendapat pesan kesalahan sebagai berikut.

MongoError: $_internalSearchBetaMongotRemote hanya valid sebagai tahap pertama dalam pipeline.

Apakah tidak mungkin menggunakan "$search di $lookup result" di mongodb atalas?

0
user3358517 19 November 2020, 10:19

1 menjawab

Jawaban Terbaik

Ya, tidak mungkin menggunakan $search dengan $lookup. Sesuai dokumentasi,

$search harus menjadi tahap pertama dari setiap pipeline yang muncul. $search tidak dapat digunakan di:

  • definisi tampilan

  • subpipa $lookup

  • tahap pipeline $facet

1
RLD 20 November 2020, 16:20