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

对包含文档列表和文档列表的文档执行操作的最佳实践是什么?

  •  0
  • JohnBigs  · 技术社区  · 6 年前

    我有一个用户文档,如下所示:

    {
      "userId": "249869823570",
      "name": "john",
      "country": "usa",
      "active": true,
      "serviceProviders": [
        {
          "serviceProvidersId": "897892893",
          "serviceProvidersName": "AT&T",
          "active": true,
          "serviceProviderContactPerson": []
        },
        {
          "serviceProvidersId": "82589628569",
          "serviceProvidersName": "T-Mobile",
          "active": true,
          "serviceProviderContactPerson": []
        }
      ]
    }
    

    我想创建3个方法来插入/更新/删除serviceProviderContactPerson我的dilema是,我的主文档有一个服务提供者数组,而一个服务提供者有一个服务提供者联系人列表…在mongo中,什么是最好的实践来实现这一点?

    ServiceProviderContactPerson文档将如下所示:

    {
        "contactId": "873498798",
        "name": "Mark",
        "email": "mark@tmobile.com",
        "phone": "917-475-4637"
    }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   s7vr    6 年前

    您可以使用更新来执行3.6中的所有操作。

    在serviceProvidersId=“897892893”处插入新的数组元素

    db.colname.update(
      {"serviceProviders.serviceProvidersId":"897892893"},
      {$push: {"serviceProviders.$.serviceProviderContactPerson":serviceProviderContactPersonDoc}}
    )
    

    更新phone where serviceprovidersid=“897892893”和contactid=“873498798”

    db.colname.update(
      {},
      {$set: {"serviceProviders.$[sp].serviceProviderContactPerson.$[spc].phone":phone value}},
      {arrayFilters:[{"sp.serviceProvidersId":"897892893"}, {"spc.contactId":"873498798"}]}
    )
    

    删除其中serviceProvidersId=“897892893”和contactId=“873498798”的数组元素

    db.colname.update(
          {},
          {$pull: {"serviceProviders.$[sp].serviceProviderContactPerson":{"contactId":"873498798"}}},
          {arrayFilters:[{"sp.serviceProvidersId":"897892893"}]}
        )