2016-07-12 2 views
1

У меня есть ArticleGroup, который содержит статьи, модели выглядят как этогомангуста заполнить вложенный массив с условием массива элемента

var ArticleGroup = new mongoose.Schema({ 
    articles:[{type:mongoose.Schema.Types.ObjectId,ref:'Article'}] 
}) 

var Article = new mongoose.Schema({ 
    rates:[{ 
     uid:String, 
     rate:Number //user's rate number to this article 
    }] 
}) 

Теперь ПОЛЬЗОВАТЕЛЬ (назовут его JACK) хотят выполнить запрос ArticleGroup, обитающие статьи в этой группе, отбирая ставки подали

обычно я делаю это

ArticleGroupModel 
    .findById(articleGroupId) 
    .populate('articles','rates') 
    .select('articles') 
    .exec((err, articleGroup) => { 
     if (err) return next(err) 
     //... 
    }) 

но теперь я только хочет скорость домкрата если одна статьи имеет скорость домкрата, просто вернуть эту статью, как это

{ 
    _id:"23jrf23orj89p3fwje4", 
    rates:[{ 
     uid:"JACK's uid", 
     rate:"JACK's rate number" 
    }] 
} 

если одна статьи имеет скорость не домкрата, статья до сих пор заселена, но с пустым ставком, поданным как этот

{ 
    _id:"23jrf23orj89p3fwje4", 
    rates:[] 
} 

Есть ли способ сделать это?

ответ

0

Для того, чтобы получить этот результат, вы должны пересмотреть свою модель данных с чем-то вроде этого:

ArticleGroup = new mongoose.Schema 
    some details here ... 

ArticleRate = new mongoose.Schema 
    uid: String 
    rate: Number 

Article = new mongoose.Schema 
    group: 
     type: mongoose.Schema.ObjectId 
     ref: 'ArticleGroup' 
    rates:[ArticleRate] 

И выполнить этот вид запроса:

Article 
.find(group: groupId) 
.populate({ 
    path: 'rates', 
    match: { uid: { $in: { JACK_UID } } }, 
    select: 'rate' 
}) 
.exec(); 

Вы могли бы найти более полезную информацию в рамках Mongoose documentation.

+0

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

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