【问题标题】:MongoDB - Need help updating an Object within an Array of a DocumentMongoDB - 需要帮助更新文档数组中的对象
【发布时间】:2023-04-04 12:43:02
【问题描述】:

情况:

我有一个名为“员工”的集合。此集合包含一组管理器。每个管理器对象都有一个名为“directReports”的属性。此属性是表示其下属的对象数组。例如:

 db.employees.find({ name: 'John Smith' });

{
   "id" : 1234,
   "name" : "John Smith",
   "FirstName" : "John",
   "LastName" : "Smith",
   "SamAccountName" : "jsmith",
   "DepartmentName" : "Management",
   "SupID" : 0,
   "Email" : "jsmith@company.tld",
   "SupSamAccountName" : "bross",
   "SupName" : "Bob Ross",
   "directReports" : [
    {
        "id" : 5678,
        "name" : "Jane Doe",
        "FirstName" : "Jane",
        "LastName" : "Doe",
        "SamAccountName" : "jdoe",
        "DepartmentName" : "Agent",
        "SupID" : 1234,
        "Email" : "jdoe@company.tld",
        "SupSamAccountName" : "jsmith",
        "SupName" : "John Smith",
    },...]}

我想做的事:

我想向 Jane Doe 添加一个名为“status”(值为“Lunch”)的新属性。

我该怎么做?

非常感谢任何帮助!

【问题讨论】:

    标签: arrays mongodb object mongoose


    【解决方案1】:

    我认为您需要在模型中添加具有“启动”值的“状态”,然后创建一个函数来更新所有员工数据。 希望对你有帮助

    【讨论】:

      【解决方案2】:

      假设SamAccountNames 是唯一的:

      db.employees.update({
          { SamAccountName: "jsmith", directReports.SamAccountName: "jdoe" },
          { $set: { directReports.$.status: "Lunch" } }
      })
      

      根据这个问题的标签,由于您使用的是 Mongoose,因此请务必适当地更新您的架构。您可以考虑重新设计架构以利用 Mongoose query population

      【讨论】:

      • 我尝试运行它,它给了我一个语法错误:E QUERY [thread1] SyntaxError: invalid property id @(shell)
      • 您使用的是ids 还是_ids?根据您的问题,我假设id。默认情况下,MongoDB 使用_id 作为唯一标识符,即ObjectIds
      • 我实际上为经理和下属都使用了 SamAccountName。我什至尝试使用 Mongo 的 _id 但这也不起作用。
      • 这个怎么样:SamAccountName 在所有员工中是唯一的吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-16
      • 2016-02-20
      相关资源
      最近更新 更多