Неизвестное название этапа конвейера: '$ populate' - PullRequest
0 голосов
/ 17 июня 2020

Я использовал следующий код для получения набора данных, и он работал нормально, без ошибок.

const postslist = await postSchemaModel.find()
        .limit(limit)
        .skip(startIndex)
        .sort({ createdAt: -1 })
        .populate(user_id)
        .populate("user_id", "img user_name _id");

Но, в моем случае я хочу получить набор результатов с $ geonear , и я использовал следующий код. Вот эта ошибка * Нераспознанное имя этапа конвейера: '$ populate' * Но функция заполнения отлично работала с приведенным выше кодом. Ниже приведен новый код, который выдает ошибку. В чем тут может быть вина?

postSchemaModel.aggregate([{
        "$geoNear": {
            "near": { "type": "Point", "coordinates": [6.7336665, 79.8994071], "Typology": "post" },
            "distanceField": "dist.calculated",
            "maxDistance": 5000,
            "includeLocs": "dist.location",
            "spherical": true
        }
    },
    { "limit": limit },
    { "skip": startIndex },
    { "$sort": { "createdAt": -1 } },
    { "populate": user_id },
    { "populate": "'user_id', 'img user_name _id'" }

]).then(async function(posts) {
    //some code here
});

1 Ответ

1 голос
/ 17 июня 2020

Ваш нерабочий код использует конвейер агрегации.

заполнить документацию ничего не упоминает об агрегации.

Похоже, вы пытались перевести функцию заполнения в синтаксис конвейера агрегации, но конвейер агрегации выполняется сервером MongoDB и не интерпретируется Mon goose, и сервер не знает, что такое «заполнить», поэтому это просто не работает.

...