使用Mongoose Populate查询引用的集合

时间:2015-07-21 21:07:21

标签: mongodb mongoose populate

我和Mongoose Populate()有一段棘手的时间。我正在尝试使用用户ID从另一个集合加载引用的文档。

我有一个像这样存储的用户集合。

{
id: "myuserid",     // alphanumeric string. 
username: "Me"
sessions: []        // note that this is deliberately empty. 
}

我有一个gamesessions系列存储游戏保存状态,如下所示:

{
    id: "gamesaveidstring", // unique id
    userId: "myuserid",     // the user who saved this. ("Me")
    properties: {}          // bunch of stuff that tracks what you doing in the game.
}  

我想返回一个如下所示的对象:

 {
    id: "myuserid",
    username: "Me",
    sessions: [{
        id: "gamesaveidstring",
        properties: {}
    },{
        id: "gamesaveidstring",
        properties: {}
    }, ...] // etc.
}

我已经查看了Mongoose文档,但我找不到一种干净的方法(可行)来实现这一目标。我可以通过嵌套查询来做到这一点,但我发现它很乱。

Populate似乎允许您在现有查询中查询另一个集合。

这就是我尝试完成查询的方式。 成功会返回用户对象,但缺少populate()查询的sessions: []数组。

User.findOne({_id: id})
    .populate({
        path: "sessions",        // where I want the data to go on the object
        select: 'properties id', // grab these fields  
        match: {userId: id},     // with this userId, same one I grabbed the user with.
        model: "GameSession",    // in this collection
        options: {limit: 5}      // but not all of them kthx.  
    })
    .exec(function(err, document) {
        res.json(document);
});

我有一个用户模型

var UserSchema = new Schema({
    _id: String, 
    username: String,
    sessions: { type: String, ref:'GameSession'} // never actually stores the ID of the gamesession. I don't want this data stored in the user document because it is saved often and many sessions are created.  
});

游戏会话模型

var GameSession = new Schema({
    _id: String,
    userId: String,
    projectId: String
});

引用文档(http://mongoosejs.com/docs/populate.html“MongoDB中没有连接,但有时我们仍然希望引用其他集合中的文档。这就是人口进入的地方。”

是的,确切地说,我有一个用户ID,我想从另一个集合中获取具有该用户ID的所有内容,并将其与我的用户捆绑在一个名为sessions的数组中。就是这样。

我做错了什么?

提前致谢。

0 个答案:

没有答案