【问题标题】:Mongoose query referenceMongoose 查询参考
【发布时间】:2013-02-10 22:51:07
【问题描述】:

我的应用程序具有以下架构结构:

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 查询故事时,我希望它输出该故事中的行以及用户屏幕名称。

目前我正在使用以下查询故事:

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 的用户设置,但我不完全确定如何输出故事以及如何将用户的屏幕名称甚至整个用户信息与输出一起包含在内

{
  "__v": 0,
  "screen_name": "Tam",
  "email": "test@test.com",
  "name": "Tam",
  "_id": "511782cab249ff5819000002",
  "created_at": "2013-02-10T11:21:46.000Z"
}

【问题讨论】:

    标签: node.js mongodb express mongoose


    【解决方案1】:

    我尚未对其进行测试,但您应该可以使用 populate 来获取每个 lines 元素的完整用户文档,如下所示:

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

    【讨论】:

    • 谢谢,这似乎奏效了!。使用这个逻辑,有没有办法查看故事的 ID 数组?还是我必须将stories: {type: Schema.ObjectId, ref: 'Story'} 添加到用户架构中,然后这样做?
    • @Tam2 嗯...我不确定你在问什么。可能最好将其作为一个单独的问题提出,您可以在其中提供更多详细信息。
    • 谢谢约翰尼,我只是问如果我在原始示例中返回用户,例如“Tam”,我是否也可以让它返回一个故事列表,例如 - gist.github.com/Tam2/d54695cb17c4a5a808c0跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2017-01-13
    • 2014-09-30
    • 2021-07-07
    相关资源
    最近更新 更多