2017-09-24 1 views
0

Je souhaite retourner toutes les conversations en ligne, où l'utilisateur connecté (user_id) est un participant.Mongoosejs - Filtrer les résultats

Je veux remplir les participants en ne retournant que le profile.firstname (peut-être un peu plus tard), je veux ensuite filtrer les participants afin qu'il ne ramène pas le loggedInUser (user_id) dans le tableau des participants.

chat.controller.js INDEX

Chat.find({participants: user_id}) 
      .populate('participants', { 
       select: 'profile.firstname', 
       where('_id').ne(user_id) // This need to change 
      }) 
      .exec(function (err, chats) { }); 

chat.model.js

const mongoose = require('mongoose'); 
const Schema = mongoose.Schema; 

let ChatSchema = new Schema({ 

     participants: [{ 
      type: Schema.Types.ObjectId, ref: 'User' 
     }], 

     messages: [{ 
      type: Schema.Types.ObjectId, ref: 'Message' 
     }], 

    }, 
    { 
     timestamps: {createdAt: 'created_at', updatedAt: 'updated_at'} 
    }); 

module.exports = mongoose.model('Chat', ChatSchema); 

Répondre

0

Selon populate documentation cela pourrait être réalisé par l'option "match".

Dans votre réponse cas serait:

Chat.find({participants: user_id}) 
     .populate('participants', { 
      select: 'profile.firstname', 
      match: { _id: {$ne: user_id}} 
     }) 
     .exec(function (err, chats) { });