Javascript 更新多级对象数组中的属性

Javascript 更新多级对象数组中的属性,javascript,arrays,mongodb,Javascript,Arrays,Mongodb,我正在尝试开发一个API,它返回一个JSON,其中包含在某个服务器上某个小时对玩游戏感兴趣的人数。非常具体的决定 因此,用户应该能够说: 今天下午4点,我将在x-server上玩一场精彩的游戏 因此,我有一个Agenda对象,其中包含一个日期和一系列游戏。游戏对象包含一个标题和插槽列表。每个Slot包含一个小时(因此每个游戏有24个Slot)和一组服务器。最后,每个服务器都有一个名称和感兴趣的玩家总数 我用mongoDB来做这个 以下是迄今为止的JSON。它很大,所以我只分享其中的一小部分: {

我正在尝试开发一个API,它返回一个JSON,其中包含在某个服务器上某个小时对玩游戏感兴趣的人数。非常具体的决定

因此,用户应该能够说:

今天下午4点,我将在x-server上玩一场精彩的游戏

因此,我有一个
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文件。去玩吧。:-)
    $
    数组更新运算符不能用于多个级别的数组嵌套-因此会出现错误。