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

Mongodb 对包含文档列表的文档执行操作的最佳实践是什么?,mongodb,Mongodb,我有一个如下所示的用户文档: { "userId": "249869823570", "name": "john", "country": "usa", "active": true, "serviceProviders": [ { "serviceProvidersId": "897892893", "serviceProvidersName": "AT&T", "active": true, "service

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

{
  "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": []
    }
  ]
}
{
    "contactId": "873498798",
    "name": "Mark",
    "email": "mark@tmobile.com",
    "phone": "917-475-4637"
}
我想创建3个方法来插入/更新/删除serviceProviderContactPerson。我的dilema是,我的主文档有一系列服务提供商,服务提供商有一个serviceProviderContactPerson列表……mongo中的最佳实践是什么

serviceProviderContactPerson文档将如下所示:

{
  "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": []
    }
  ]
}
{
    "contactId": "873498798",
    "name": "Mark",
    "email": "mark@tmobile.com",
    "phone": "917-475-4637"
}

您可以使用update执行3.6中的所有操作

在serviceProvidersId=“897892893”的位置插入一个新数组元素

更新serviceProvidersId=“897892893”和contactId=“873498798”所在的电话

删除serviceProvidersId=“897892893”和contactId=“873498798”所在的数组元素


我试图用这样的方式进行FindModify:
val query=json(“userId”->“249869823570”,“serviceProviders.serviceProvidersId”->“897892893”,“serviceProviders.serviceProvidersId.contactId”->“873498798”)val update=json($set”->json(“serviceProviders.serviceProviderContactPerson.$”->contact))
在3.6以下的版本中不允许使用多个位置运算符。因此,如何使用findAndModify实现这一点?因为这就是我迄今为止的工作方式。你的版本是什么?3.4,无法升级
db.colname.update(
      {},
      {$pull: {"serviceProviders.$[sp].serviceProviderContactPerson":{"contactId":"873498798"}}},
      {arrayFilters:[{"sp.serviceProvidersId":"897892893"}]}
    )