2014-08-31 3 views
0

У меня есть две модели Mongoose в моем приложении, а именно User и Post. Пользователи могут следить за другими пользователями, создавать/читать/обновлять/удалять сообщения. На одном из маршрутов зарегистрированный пользователь (уже получивший часть авторизации) должен получить все сообщения, которые были созданы пользователями, которых он следует.Запрос сообщений пользователей, за которыми следует текущий пользователь

Вот соответствующие участки User ...

var UserSchema = new Schema({ 
    username: String, 
    email: String, 
    password: String, 
    posts: [{ 
     type: Schema.Types.ObjectId, 
     ref: 'Post' 
    }], 
    following: [{ 
     type: Schema.Types.ObjectId, 
     ref: 'User' 
    }] 
}); 

... и Post модель.

var PostSchema = new Schema({ 
    title: String, 
    summary: String, 
    body: String, 
    author: [{ 
     type: Schema.Types.ObjectId, 
     ref: 'User' 
    }] 
}); 

В основном я хочу, чтобы получить все сообщения, которые'S author содержится в req.user.following.

Я пытался найти посты, как это:

Post.find({ author: req.user.following }).exec(function(err, posts){ 
    // handling results, etc 
}); 

Но, конечно, это не сработало. Я думал об этом, как и в среде PHP/MySQL, например, о создании другой модели для последующих действий, которая хранит, кто следует за кем, но я, вероятно, все же столкнулся с некоторыми проблемами, как описано выше.

Как новичок в Node.js (и MongoDB тоже, на самом деле), я был бы очень признателен, если бы Вы, пожалуйста, дайте мне несколько советов о том, как я должен делать это так, как узел, или даже если вы могли бы просто укажите некоторые аспекты моего кода, которые могут быть улучшены. Благодаря!

ответ

1

Вы близки, вам просто нужно использовать $in оператор:

Post.find({ author: { $in: req.user.following }}).exec(function(err, posts){ 
    // handling results, etc 
}) 

Ваш существующий запрос ищет точное соответствие между двумя массивами.

Смежные вопросы