mongodb - 带有猫鼬或 SQL 的 MongoDB
问题描述
我对 mongoDB 有点陌生,我想弄清楚我应该使用 MongoDB 还是使用熟悉的 SQL。
起初我真的很想使用 MongoDB,但它真的很慢,而且我很难设计我的数据库和查询。
例如: SQL
假设我有这些表:
User Table (Id, Name)
Group (Id, Name)
GroupInvites (UserId, GroupId, Status[A - active, I - invited])
如果我想知道一个玩家是否有和组邀请,从 GroupInvites 表中选择和更新将非常容易。
MongoDB
但在 MongoDB 中,GroupInvites 是多余的,因为我们可以在组方案中拥有 Status。
const BetGroupSchema = mongoose.Schema({
name: {
type: String,
required: true
},
users: [{
userId: {
type: mongoose.SchemaTypes.ObjectId,
ref: 'users',
required: true
},
userStatus: {
type: String,
required: true
}
}]
})
但是现在,如果我只想选择特定用户有邀请的组,那就更难了——
Group.find({
"users.userId": req.user._id,
"users.userStatus": "I"
})
这样做的结果将给出具有 UserID 的所有组和具有 UserStatus = 'I' 的所有组。
而且我找不到直接更新数据库的快速方法,如果我想将特定用户状态更新为“A”。
也许我弄错了,有人可以向我展示在 MongoDB 中实现它的好方法,或者您认为使用 SQL 会更好。
解决方案
我可以理解,作为一个初学者,即使是简单的查询也很难做好,如果我在你的位置,我会按照以下方式进行这样的查询
1.查找嵌套在数组中的文档的查询:
Group.find({users: {$elemMatch: {userId:req.user._id, userStatus:"I"}}})
2. 更新嵌套在数组中的文档的查询:
Group.update( { "name": "John","users.userId" : req.user._id },
{ "$set": { "users.$.userStatus": "A" } } )
推荐阅读
- javascript - 如何从 json 中分离键和值并将其存储在数组中使用 useState 挂钩反应
- oracle - PLSQL 中的变量
- r - 安装包期间未找到 Rtools 4.0
- apache-kafka - 通往卡夫卡的甲骨文金门
- hyperledger-fabric - 创建 orderer genesis 文件但未获得预期输出
- flutter - 如何在颤动图表中旋转文本?
- javascript - 在 Django 中通过 XMLHttpRequest 向服务器发送数据
- reactjs - 具有动态(基于 uid)路径的 React-Redux mapStateToProps
- python - 连接同一数据框中的两列
- ios - 如何在 SwiftUI 中的多个视图之间添加依赖动画?