у меня есть следующие схемы mongoose
:Мангуст массив срез, в заселенном поле
Главным является userSchema
, который содержит массив друзей, friendSchema
. Каждый friendSchema
является объектом, который содержит массив messageSchema
. messageSchema
- это самый глубокий объект, содержащий тело сообщения.
var messageSchema = new mongoose.Schema({
...
body: String
});
var conversationsSchema = new mongoose.Schema({
...
messages: [messageSchema]
});
var friendSchema = new mongoose.Schema({
user: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
},
conversation: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Conversation',
},
}, { _id : false });
var userSchema = new mongoose.Schema({
...
friends: [friendSchema]
});
При получении друга конкретного пользователя, я заселить свои друг профили, а если разговор есть, я тоже заселить разговор. Как я могу отрезать массив conversations.messages
, который находится в населении объекта conversation
? Я не хочу возвращать все сообщения.
var userId = req.userid;
var populateQuery = [{ path:'friends.user',
select: queries.overviewConversationFields },
{ path:'friends.conversation' }];
User
.find({ _id: userId }, { friends: 1 })
.populate(populateQuery)
.exec(function(err, result){
if (err) { next(err); }
console.log(result);
}
РЕДАКТИРОВАТЬ (1): Я пытался
.slice('friends.conversation.messages', -3)
РЕДАКТИРОВАТЬ (2): Я пытался в заселить запросе
{ path:'friends.conversation', options: { 'friends.conversation.messages': { $slice: -2 } }
РЕДАКТИРОВАТЬ (3): Для теперь я могу добиться того, что хочу, нарезая массив после выполнения запроса. Это не оптимизировано.
предела массива как в? Не могли бы вы быть более конкретными. –
Поскольку массив содержит весь разговор между двумя пользователями, я хотел бы получить только 25 последних сообщений, например: – FrenchFalcon
http: // stackoverflow.com/questions/28514790/how-to-set-limit-for-array-size-in-mongoose-schema –