我使用以下代码接收我的数据集,并且工作正常,没有任何错误。
const postslist = await postSchemaModel.find()
.limit(limit)
.skip(startIndex)
.sort({ createdAt: -1 })
.populate(user_id)
.populate("user_id", "img user_name _id");
但是,就我而言,我想使用 $ geonear 获得结果集,并使用了以下代码。出现此错误的原因是 *无法识别的管道阶段名称:'$ populate'* 但是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
});
答案 0 :(得分:1)
您的非工作代码使用聚合管道。
populate documentation没有提及任何有关聚合的内容。
您似乎试图将填充函数转换为聚合管道语法,但是聚合管道是由MongoDB服务器执行的,而不是由Mongoose解释的,并且服务器不知道什么是“填充”,因此就不会工作。