espress mongodb聚合按ID数组排除docs

时间:2018-03-15 17:59:12

标签: mongodb express search

我有一个搜索控制器,我希望通过一系列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}无效

1 个答案:

答案 0 :(得分:0)

我认为你的数组user.friends是一个字符串数组,因为它检查的是_id是一个Object而不是一个String,查询无法正常工作。

所以你必须将数组user.fridns转换为一个对象数组。类似的东西:

user.friends = user.friends.map(x => ObjectId(x) );