mongoose 如何将所有MongoDB文档中的特定字段从字符串值更新为数组值

ljo96ir5  于 2022-11-13  发布在  Go
关注(0)|答案(1)|浏览(150)

我的MongoDB集合包含了83,000多个从.csv文件导入的文档。模式是一个简单的非嵌套模式。每个文档都有一个String类型的“coordinates”字段,如下所示

coordinates: "61.11736,-149.86379"

我想更新/替换它们的所有值,如下所示:coordinates: [61.11736, -149.86379],因为我想使用MongoDB $near查询选择器,因为它只适用于type: 'Point'<field_name>: [<long>, <lat>]的字段。
我应该运行什么样的查询来执行这个更新?(我使用的是Node.js/Express)。提前感谢。
我基本上想做一个查询,它将获得指定坐标集附近的位置(MonogoDB文档):[long,lat]但是我不能这样做。

u59ebvdq

u59ebvdq1#

您可以使用聚合管道执行更新,以将字段转换为GeoJson点对象。

db.geoJson.update({},
[
  {
    "$addFields": {
      "coordinates": {
        type: "Point",
        coordinates: {
          "$map": {
            "input": {
              "$reverseArray": {
                "$split": [
                  "$coordinates",
                  ","
                ]
              }
            },
            "as": "c",
            "in": {
              "$convert": {
                "input": "$$c",
                "to": "double",
                "onError": "",
                "onNull": ""
              }
            }
          }
        }
      }
    }
  }
],
{
  multi: true
})

Mongo Playground
然后,您可以在字段坐标上创建二维球体索引,以执行所需的$near查询。
请注意,在创建2dsphere索引时,交换坐标以解决潜在的“经度/纬度超出界限”错误。
参考:https://database.guide/fix-longitude-latitude-is-out-of-bounds-in-mongodb-when-creating-a-2dsphere-index/

相关问题