Javascript 更新多级对象数组中的属性
我正在尝试开发一个API,它返回一个JSON,其中包含在某个服务器上某个小时对玩游戏感兴趣的人数。非常具体的决定 因此,用户应该能够说: 今天下午4点,我将在x-server上玩一场精彩的游戏 因此,我有一个Javascript 更新多级对象数组中的属性,javascript,arrays,mongodb,Javascript,Arrays,Mongodb,我正在尝试开发一个API,它返回一个JSON,其中包含在某个服务器上某个小时对玩游戏感兴趣的人数。非常具体的决定 因此,用户应该能够说: 今天下午4点,我将在x-server上玩一场精彩的游戏 因此,我有一个Agenda对象,其中包含一个日期和一系列游戏。游戏对象包含一个标题和插槽列表。每个Slot包含一个小时(因此每个游戏有24个Slot)和一组服务器。最后,每个服务器都有一个名称和感兴趣的玩家总数 我用mongoDB来做这个 以下是迄今为止的JSON。它很大,所以我只分享其中的一小部分: {
Agenda
对象,其中包含一个日期和一系列游戏。游戏
对象包含一个标题和插槽列表。每个Slot
包含一个小时(因此每个游戏有24个Slot)和一组服务器。最后,每个服务器都有一个名称和感兴趣的玩家总数
我用mongoDB来做这个
以下是迄今为止的JSON。它很大,所以我只分享其中的一小部分:
{
"_id":{"$oid":"608ed34799fc933a1263664a"},
"date":"2021-05-04",
"games":[
{
"_id":{"$oid":"608ea801b8ba823613c49e2f"},
"title":"Amazing Game",
"active":true,
"slots":[
{
"hour":0,
"servers":[
{
"_id":{"$oid":"608eb2e1b8ba823613c49e31"},
"name":"x-server",
"active":true,
"total":0
},
{
"_id":{"$oid":"608eb32fb8ba823613c49e32"},
"name":"russian-server",
"active":true,
"total":0
},
{
"_id":{"$oid":"608eb33ab8ba823613c49e33"},
"name":"usa-server",
"active":true,
"total":0
}
]
},
{
"hour":1,
"servers":[
{
"_id":{"$oid":"608eb2e1b8ba823613c49e31"},
"name":"x-server",
"active":true,
"total":0
},
{
"_id":{"$oid":"608eb32fb8ba823613c49e32"},
"name":"russian-server",
"active":true,
"total":0
},
{
"_id":{"$oid":"608eb33ab8ba823613c49e33"},
"name":"usa-server",
"active":true,
"total":0
}
]
}
]
}
]
}
我有两个问题:
我做的对吗?这个json看起来很混乱,我想知道我是否能想出更简单的方法。也许我遗漏了什么
我在更新某个服务器中某个游戏时段的玩家总数时遇到了一些问题。我试图直接从mongoose使用updateOne
来实现这一点,但经过多次尝试后,我想知道是否应该首先从数据库获取整个议程,用javascript操作对象,以便更新属性的值,然后使用save()
方法再次保存整个文档
比方说,我想在1点钟的神奇游戏中,为x-server增加1的总数
我试过:
db.agendaments.updateOne({u id:ObjectId('608ed070b27d3a37be167bcf'),“games.title:“惊人的游戏”,“games.slots.hour”:1,“games.slots.servers.name:“x-server”},{$set:{“games.$.slots.$.servers.$.total:$.10})
得到:
MongoError:path'games.$.slots.$.servers.$.total.$.total'中的位置元素(即“$”)太多。
您可以在线尝试,它可以从JSON生成架构,您可以使用该结构。还有JSON验证器(例如),甚至编辑器(例如),它们根据模式构建表单,这有助于验证结构和创建示例JSON文件。去玩吧。:-)$
数组更新运算符不能用于多个级别的数组嵌套-因此会出现错误。