Запрос для получения данных, отсутствующих в нескольких массивах - PullRequest
1 голос
/ 10 мая 2019

Привет, у меня есть такая схема пользователя: -

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);
      })

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

1 Ответ

1 голос
/ 10 мая 2019

Хорошо, если у вас есть пользовательский документ (потому что вы используете его координаты), тогда просто добавьте $ match, чтобы отфильтровать пользователей перед фазой $ geonear.

{ 
  $match: {
         $and: [
           { _id: {$nin: user.sentFriendRequests},
           { _id: {$nin: user.receivedFriendRequests}
          ]
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...