我有一个搜索控制器,我希望通过一系列ID排除某些文档。接下来是我的聚合:
var aggregation = [
{
$geoNear:{
query : {
//_id:{$nin:user.friends}, <---- user.friends is an array of id's that I want to exclude
"profile.age":{$gte: minAge, $lte: maxAge},
"approved":true
},
near: { type: "Point", coordinates: [ user.location[0], user.location[1]] },
limit:100,
maxDistance:radius*1000,
distanceField: "dist.calculated",
includeLocs: "dist.location",
distanceMultiplier:1/1000,
spherical: true
}
},
{
$project:{
online:1,
promoted:1,
location:1,
profile:1,
dist:1
}
},
{ $sort : { online:-1, promoted:-1} }
];
我怎样才能实现结果会排除某些doc的数组'user.friends'填充了需要排除的id。 _id:{$ nin:user.friends}无效
答案 0 :(得分:0)
我认为你的数组user.friends
是一个字符串数组,因为它检查的是_id是一个Object而不是一个String,查询无法正常工作。
所以你必须将数组user.fridns
转换为一个对象数组。类似的东西:
user.friends = user.friends.map(x => ObjectId(x) );