我是MongoDB的新手,我正在用Mongoose创建一个简单的数据库,模型如下:用户、游戏和玩家。
因此,一个用户不包含或包含多个游戏。每个游戏都有一个玩家,每个玩家都指一个用户。如下所示(为了清晰起见,我简化了模式):
const UserSchema = new Schema({
name: String,
games: [{
type: Schema.Types.ObjectId,
ref: 'game'
}]
});
const GameSchema = new Schema({
mode: Number,
players: {
type: [{
type: Schema.Types.ObjectId,
ref: 'player'
}],
required: true
}
});
const PlayerSchema = new Schema({
order: Number,
isWinner: Boolean,
user: {
type: Schema.Types.ObjectId,
ref: 'user',
required: true
}
});
因此,现在在前端,我想向后端发送一份请愿书,为用户Joe(_id:11111)和Bob(_id:22222)创建一个新游戏,因此我向/api/games发送了一篇帖子,帖子的主体是{users:[111112222]}
现在我的问题是,对于后端来说,创建一个新游戏,它也必须创建2个玩家。实现这一点的最好方法是什么?
在游戏中。create()方法,我应该检索数据、创建并保存玩家、创建游戏、分配玩家、保存游戏,以及更新用户和添加游戏ID吗?
我还了解了Mongoose中间件,您可以将某些函数设置为在某些操作之前或之后执行。所以也许它更好:在比赛前做准备。创建,在游戏开始前创建玩家post功能。创建,以更新用户
最后一个看起来更干净。最好的办法是什么?也许还有一个我没有考虑过的?
谢谢
我建议您使用猫鼬中间件中定义的post和前函数。它们使用起来非常简单整洁。它可能会解决你的问题。
这是我们遇到的一个问题的个人例子;在我们的例子中,我们必须从数据库中的序列中分配一个用户ID。我们使用了以下代码:
var UserSchema = new Schema({
username: { type: String, required: true, unique: true },
id: { type: String },
...
});
UserSchema.pre('save', function(next) {
let doc = this;
let id = 'userSeq'
Sequence.findByIdAndUpdate(id, { $inc : {nextSId : 1} }, function(error,data) {
if(error)
next(error)
doc.id = data.nextSId-1;
next();
})
});
我的建议是,在你创建游戏之前,你可以搜索用户,并添加对游戏的引用。如果我是你,我会使用mongodb的findAndModify查询来查找用户,或者在用户还不存在的情况下创建用户。
我有GWT的Spring入学申请。在服务器端,我为所有实体提供了简单的JpaRepository接口,例如: 有一个MyEntity类与My其他Entity类有一对一的关系。当我调用我的实体服务持久化方法时 将只保存myEntity对象。MyEntity的所有子对象都被忽略。保存myEntity对象和myOtherEntity对象的唯一方法是调用 在上面的代码之前。那么有没有更优雅的方法来使用Jp
我将spring boot与thymeleaf结合使用,在页面中尝试显示表单及其嵌套对象。 我的对象工厂有 id 当我显示时 我的工厂有很多机器,但没有一台展出 任何想法?
我创建映射如下所示。如何将平面dto对象属性(街道、城市等)映射到域对象中的嵌套地址。当我试着去做的时候,我发现了一个错误: [错误]诊断:返回类型中的属性“Address.PostalCode”未知。@Mapping(来源=“City”,目标=“Address.City”), 还有类...
问题内容: 我的映射是: 我想获取所有没有字段的文档。 我试过了: 返回所有文档。基于ElasticSearch2.x,存在用于嵌套字段的过滤器不起作用的问题,我也尝试过: 返回0个文档。 使所有缺少该字段的文档的正确查询是什么? 问题答案: 我找到了正确的语法,应该是:
让我们考虑一下这些帖子的集合。每个帖子都有一个评论数组,每个评论都有一个字符串数组,带有键“likes”,表示喜欢该评论的用户。 如何使用mongoose检查用户是否喜欢具有给定ID的评论?