嗨,我有这样的用户架构:-
var userSchema = new Schema({
name: {type: String, default: null},
location: {
type: { type: String },
coordinates: [Number],
},
sentFriendRequests: [
{type: Schema.Types.ObjectId, ref: 'user'}],
receivedFriendRequests: [
{type: Schema.Types.ObjectId, ref: 'user'}]
});
它可以很好地满足所有要求。我正在使用此查询搜索附近的用户:-
User.aggregate(
[{
$geoNear: {
near: { type: "Point", coordinates: [ longitude , latitude ] },
distanceField: "dist.calculated",
num: 5,
spherical: true
}
}], function(err, nearByUsers){
console.log(nearByUsers);
})
上面的查询工作得很好,但是现在我只想搜索不在我的好友数组中并且不在发送和接收的好友请求数组中的我的用户。
答案 0 :(得分:1)
假设您拥有用户文档(因为使用的是它的坐标),那么只需在$ geonear阶段之前添加$ match来过滤掉用户。
{
$match: {
$and: [
{ _id: {$nin: user.sentFriendRequests},
{ _id: {$nin: user.receivedFriendRequests}
]
}
}