nodejs фильтрует сообщения, например, в ленте instagram

#node.js #mongodb #rest #mongoose

Вопрос:

Я создаю собственный сервер для приложения, подобного instagram.

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

Как я могу достичь такого результата? (я использовал Post.find({page:{$in:user.followingPages},creator:{$in:user.followingUsers}}) , но этот метод дает мне только сообщения, соответствующие обоим условиям, мне нужен пост, соответствующий одному из них или обоим)

Ниже приведена моя модель пользователя

 const userSchema = mongoose.Schema(
  {
    username: {
      type: String,
      default: 'nesibeyyubov',
    },
    bio: {
      type: String,
      default: '',
    },
    followingUsers: [
      {
        type: mongoose.Types.ObjectId,
        ref: 'User',
      },
    ],
    posts: [
      {
        type: mongoose.Types.ObjectId,
        ref: Post
      },
    ],
    followingPages: [
      {
        type: mongoose.Types.ObjectId,
        ref: 'Page',
      },
    ],
  },
  { timestamps: true }
);
 

Это постмодель

 const postSchema = mongoose.Schema(
  {
    post: {
      type: String,
      required: true,
    },
    creator: {
      type: mongoose.Types.ObjectId,
      ref: 'User'
      required: true,
    },
    likes: [
      {
        type: mongoose.Types.ObjectId,
        ref: 'User',
      },
    ],
  },
  { timestamps: true }
);
 

Ответ №1:

Запятая означает и , вы должны написать $или.

 YourModel.find( { $or: [
            { page: { $in: user.followingPages } },
            { creator: { $in: user.followingUsers } },
   ],
} );