我和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的数组中。就是这样。
我做错了什么?
提前致谢。