代码之家  ›  专栏  ›  技术社区  ›  MusicDev

Mongoose:向嵌套对象添加属性

  •  2
  • MusicDev  · 技术社区  · 7 年前

    我目前使用的是AngularJS,后端使用的是Nodejs和Express。我使用Mongoose访问数据库。我正在尝试如何向嵌套对象添加属性,但我一直无法在Web上的任何地方找到如何添加属性。

    我的架构如下:

    {
    id: {
        type: String
    },
    involved: {
        type: String
    },
    lastMsgRead: Object
    
    }
    

    LastmsGread将如下所示:

    {
        user1: "somestringblahblah",
        user2: "someotherstring",
    }
    

    等等。 我的问题是,如何用mongoose更新lastmsgread以向其添加另一个属性,如添加user3,使其看起来像:

    {
        user1: "somestringblahblah",
        user2: "someotherstring",
        user3: "anotherstring"
    }
    

    整个文档在更新后都希望这样:

    {
        id: "string",
        involved: "string",
        lastMsgRead: {
            user1: "somestringblahblah",
            user2: "someotherstring",
            user3: "anotherstring"
        }
    
    }
    

    编辑: 在我添加属性之后,我将如何在将来更新它?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Ashh    7 年前

    可以使用.dot表示法在嵌套对象中更新

    db.collection.update(
      { },
      { "$set": { "lastMsgRead.user3": "anotherstring" } }
    )
    
        2
  •  0
  •   k0hamed    7 年前

    在Mongoose5.1.0及更高版本中,您可以使用 MongooseMap . 您可以在模式中定义它,如下所示:

    {
      id: {
        type: String
      },
      involved: {
        type: String
      },
      lastMsgRead: {
         type: Map,
         of: String
      }
    }
    

    然后可以通过以下方式添加新值: .set(key, value)

    myDoc.lastMsgRead.set(key, value)
    

    得到一个值 .get(key)

    myDoc.lastMsgRead.get(key)