Mongodb 如何在集合中添加或填充子文档模型
我已经试着问过这个问题,但我想我还不清楚,因为没有人回答,所以我将在这里给出一个带有一些代码的特定场景 上下文很简单,让我们想象一个每周的锦标赛,每个锦标赛都由游戏组成,游戏由玩家组成 因此,我们有3个模式:Mongodb 如何在集合中添加或填充子文档模型,mongodb,mongoose,Mongodb,Mongoose,我已经试着问过这个问题,但我想我还不清楚,因为没有人回答,所以我将在这里给出一个带有一些代码的特定场景 上下文很简单,让我们想象一个每周的锦标赛,每个锦标赛都由游戏组成,游戏由玩家组成 因此,我们有3个模式: TournamentSchema{ 游戏:[{type:mongoose.Schema.Types.ObjectId,ref:'Game'}] 玩家:[ { _用户:{type:mongoose.Schema.Types.ObjectId,ref:'user'}, 点:{type:Num
TournamentSchema{
游戏:[{type:mongoose.Schema.Types.ObjectId,ref:'Game'}]
玩家:[
{
_用户:{type:mongoose.Schema.Types.ObjectId,ref:'user'},
点:{type:Number}
}
]//用户为此锦标赛获得的总积分
}
游戏模式{
玩家:[
{
_用户:{type:mongoose.Schema.Types.ObjectId,ref:'user'},
点:{type:Number}
}
]//用户为此特定游戏获得的积分总数
}
球员模式{
伪:{type:String},
电子邮件:{type:String},
积分:{type:Number}//玩家的总收入
//(每场比赛)。
}
这里一切都很好。
为了避免每次客户端想要显示排名(按点数排序的touring.Players集合),我都会将锦标赛实例保存到一个特定的模块中(这样我就可以slice()
排序的Players集合中我需要处理的部分)
因此,每当玩家加入游戏时,我必须:
创建一个新的游戏实例,将他添加到其中并保存它
将他添加到现有的锦标赛.Players集合中
,然后保存它
问题是,我无法将模型
推入Tournamanent.Players集合
,我猜mongoose无法管理它(插入后玩家模型
会变成对象ID
):
var NewPlayer=newplayerschema(
{伪:“warior”,电子邮件:'warioir@something.com' }
);
锦标赛.Players.push({u用户:NewPlayer,点数:0})
//添加一项:{u用户:,_id:,点:0}pseudo??电子邮件??
因此,当我将一个完整的模型玩家推到填充的锦标赛玩家集合中时,它就变成了ObjectID
我的问题就在这里,因为在那之后,我有一个锦标赛。玩家
集合有填充和未填充的玩家,管理起来很痛苦!
所以我现在要做的是,每次我推一个玩家模型时,我都会在整个比赛中用一个填充类创建一个新的find(),并用我刚得到的实例替换我的旧实例,但这是一个非常特殊的需要的大操作
您将如何管理这种情况(需要在存储在模块中的已填充集合上添加模型) 我会分两步来做。当新玩家加入时,在用户表中创建一个条目,获取该_id,然后将其插入游戏和锦标赛集合中。猫鼬不像你过去使用的其他怪物那么“神奇”。我最近做了一个1k行更改,将mongoose从一个项目中删除,并改用本地驱动程序