2013-02-10 135 views
0

我有以下模式结构为我的应用程序:猫鼬查询参考

var User = new Schema({ 
    name: {type: String, required: true}, 
    screen_name: {type: String, required: true, index:{unique:true}}, 
    email: {type: String, required: true, unique:true}, 
    created_at: {type: Date, required: true, default: Date} 
}); 


var Line = new Schema({ 
    user: {type: Schema.ObjectId, ref: 'User'}, 
    text: String, 
    entered_at: {type: Date, required: true, default: Date} 
}); 


var Story = new Schema ({ 
    sid: {type: String, unique: true, required: true}, 
    maxlines: {type: Number, default: 10}, // Max number of lines per user 
    title: {type: String, default: 'Select here to set a title'}, 
    lines: [Line], 
    created_at: {type: Date, required: true, default: Date} 
}); 


var Story = db.model('Story', Story); 
var User = db.model('User', User); 

当我使用我想要的SID输出在故事线查询一个故事,但也是用户SCREEN_NAME。

我目前使用下面的查询故事:

app.get('/api/1/story/view/:id', function(req, res){ 
    Story.findOne({ sid: req.params.id }, function(err, story){ 
      if (err) { 
      res.json(err); 
     } 
     else if(story == null) { 
      res.json(err); 
     } 
     else{ 
     res.send(story);  
      } 
     }); 
}); 

刚刚带回的结果是这样的:

{ 
    "__v": 1, 
    "_id": "5117878e381d7fd004000002", 
    "sid": "DIY0Ls5NwR", 
    "created_at": "2013-02-10T11:42:06.000Z", 
    "lines": [ 
    { 
     "user": "511782cab249ff5819000002", 
     "text": "TESTING", 
     "_id": "51178795381d7fd004000003", 
     "entered_at": "2013-02-10T11:42:13.000Z" 
    } 
    ], 
    "title": "Select here to set a title", 
    "maxlines": 10 
} 

有一个用户建立与_id但我不完全确定如何输出故事,并为它包括用户screen_name甚至整个用户信息以及输出

{ 
    "__v": 0, 
    "screen_name": "Tam", 
    "email": "[email protected]", 
    "name": "Tam", 
    "_id": "511782cab249ff5819000002", 
    "created_at": "2013-02-10T11:21:46.000Z" 
} 

回答

1

我没有测试它,但你应该能够使用populate得到充分的用户文档象这样的每lines元素:

Story.findOne({sid: req.params.id}) 
    .populate('lines.user') 
    .exec(function(err, story){ ... 
+0

谢谢,这似乎已经奏效!使用这个逻辑,有没有办法看到一个Story's ID的数组? 或者我必须在用户模式中添加'stories:{type:Schema.ObjectId,ref:'Story'}'然后执行某种操作? – Tam2 2013-02-10 15:21:11

+0

@ Tam2嗯......我不确定你在问什么。或许更好地将它作为一个单独的问题来提供,您可以在其中提供更多细节。 – JohnnyHK 2013-02-10 15:30:45

+0

谢谢约翰尼,我只是问,如果我在原始示例中返回例如'Tam'的用户,我是否也可以让它返回storys列表,如 - https://gist.github.com/Tam2/ d54695cb17c4a5a808c0 – Tam2 2013-02-10 15:44:12