2013-07-10 3 views
1

Я пишу приложение для чтения каналов с помощью экспресс и мангуста. У меня есть 3 схемы:Mongoose как заполнять ссылочные документы

CategorySchema = new mongoose.Schema({ 
       title:{type:String, unqiue:true, required:true}, 
       created_at:{type:Date, default:Date.now}, 
       order:Number, 
       _feeds:[ 
        {type:mongoose.Schema.Types.ObjectId, ref:"Feed"} 
       ] 
      }); 

FeedSchema = new mongoose.Schema({ 
       xmlurl:{type:String, unique:true, required:true}, 
       title:{type:String, required:true}, 
       original_title:String, 
       link:{type:String, required:true}, 
       favicon:String, 
       date:Date, 
       description:String, 
       _articles:[ 
        {type:mongoose.Schema.Types.ObjectId, ref:'Article'} 
       ], 
       _created_at:{type:Date, default:Date.now}, 
       _category:{type:mongoose.Schema.Types.ObjectId, ref:"Category"} 

      }); 

ArticleSchema = new mongoose.Schema({ 
       title:{type:String, required:true}, 
       description:String, 
       summary:String, 
       meta:mongoose.Schema.Types.Mixed, 
       link:{type:String, required:true}, 
       guid:String, 
       categories:[String], 
       tags:[String], 
       pubDate:{type:Date, default:Date.now}, 
       _feed:{ 
        type:mongoose.Schema.Types.ObjectId, 
        ref:"Feed", 
        required:true 
       }, 
       _favorite:Boolean, 
       _read:Date, 
       _created_at:{type:Date, default:Date.now} 
      }); 

Категория имеют каналы и каналы имеют статьи.

я могу заполнить категории с их кормами

mongoose.model("Category").find().populate("_feeds").exec(callback); 

Теперь я хотел бы от категории, чтобы заполнить каналы с их статьями, которые были прочитаны.

Как я мог это сделать?

источник: https://github.com/Mparaiso/FeedPress/blob/master/lib/database.js

спасибо.

ответ

0

Для одной категории документа, который мог бы выглядеть примерно так:

// retrieve all feeds in the list and populate them 
mongoose.model('Feed') 
    .find({ _id : { $in : category._feeds } }) // see text 
    .populate('_articles') 
    .exec(...); 

(я сначала подумал, что массив передается $in должен быть списком ObjectId-й лет, но, видимо, это нормально, чтобы передать массив документов)

EDIT: Я думаю, что это работает, тоже:

mongoose.model('Feed') 
    .populate(category._feeds, { path : '_articles' }) 
    .exec(...); 
Смежные вопросы