从JSON文件填充新的mongo文档,然后将objectId推入另一个嵌套文档中

时间:2018-12-13 17:41:40

标签: node.js mongodb mongoose

我有一个嵌套文档,其中包含具有以下结构的嵌套对象:

[
  {
    "_id": "5c005310b736c137dc96f01f",
    "country": "Spain",
    "cities":[
      {
        "id": "mad01",
        "city": "Madrid",
        "spots":[]
      },
      {
        "id": "bar02",
        "city": "Barcelona",
        "spots":[]
      }
    ]
  },
  {
    // Other country
  }
]

在每个国家/地区内,我都有许多城市,并且每个城市还包含许多点,这些点将成为我特定点的GPS坐标。 现在,我想使用一个包含城市ID和带有我的GPS坐标的数组的JSON文件。 id用于了解这些GPS坐标所属的城市。 具有我所有GPS坐标的“我的文件”具有以下格式:

[
  {
    "_id": "mad01",
    "spots": [
      {
        "loc": "Point",
        "coordinates": [-8.627868, 41.537152]
      },
      {
        "loc": "Point",
        "coordinates": [-8.626667, 41.538124]
      }
    ]
  },
  {
    "_id": "bar02",
    "spots": [
      {
        "loc": "Point",
        "coordinates": [-8.628019, 41.536317]
      },
      {
        "loc": "Point",
        "coordinates": [-8.626013, 41.538349]
      }
    ]
  }
]

现在,我想使用此文件来创建一个新文档,以仅保存我的坐标。这个称为“坐标”的新文档是GPS坐标的数组,其ID是在创建文档时生成的。结果应该是:

[
  {
    "_id" :"5c101ee454225b7314caac4d",
    "loc": "Point",
    "coordinates": [-8.627868, 41.537152]
  },
  {
    "_id": "5c101ee454225b7314caac4c",
    "loc": "Point",
    "coordinates": [-8.626667, 41.538124]
  },
  {
    "_id": "5c101ee454225b7314caac4b",
    "loc": "Point",
    "coordinates": [-8.628019, 41.536317]
  },
  {
    "_id": "5c101ee454225b7314caac4a",
    "loc": "Point",
    "coordinates": [-8.626013, 41.538349]
  }
]

必须将生成的ID插入城市数组中国家的初始文档中,以用作“坐标文档”的外键。因此,我们将在文档中提供以下信息:

[
  {
    "_id": "5c005310b736c137dc96f01f",
    "country": "Spain",
    "cities":[
      {
        "id": "mad01",
        "city": "Madrid",
        "spots":[
          "5c101ee454225b7314caac4d",
          "5c101ee454225b7314caac4c"
        ]
      },
      {
        "id": "bar02",
        "city": "Barcelona",
        "spots":[
          "5c101ee454225b7314caac4b",
          "5c101ee454225b7314caac4a"
        ]
      }
    ]
  },
  {
    // Other country
  }
]

是否可以在单个操作中执行此操作。我不知道是否可以使用Bulk,或者有更好的解决方案,可以使用另一种方法获得相似的结果。

0 个答案:

没有答案