1

我实际上正在使用 express js 和 mongodb 4.2.7 创建一个自动完成网站栏,并使用 lat & lon 来避免使用地理编码 api。

这是我的数据库的格式:

{
  "_id" : ObjectId("5eea03e9a7891b6d701df571"),
  "id_ban_position" : "ban-position-4c882de48d894fc49ed9be76f7631d6d",
  "id_ban_adresse" : "ban-housenumber-78a2651ce382476ca9c8c8fcbcbaa539",
  "cle_interop" : "01001_A028_5307",
  "id_ban_group" : "ban-group-37c7c3f2b61440b48bca7d8fad56055e",
  "id_fantoir" : "01001A028",
  "numero" : 5307,
  "suffixe" : "",
  "nom_voie" : "Lotissement les Lilas",
  "code_postal" : 1400,
  "nom_commune" : "L'Abergement-Clémenciat",
  "code_insee" : 1001,
  "nom_complementaire" : "",
  "x" : 848436.205131189,
  "y" : 6562595.33916435,
  "lon" : 4.923279,
  "lat" : 46.146903, 
  "typ_loc" : "parcel",
  "source" : "dgfip",
  "date_der_maj" : "2019-02-12"
}

如您所见,我有很多字段对于我的网站而言不是必需的,最重要的是,我不需要为街道中的每个数字获取一行,一个唯一的街道名称就足够了。所以我决定抑制重复的街道名称('nom_voie')和城镇名称('nom_commune'),聚合如下:

db.Addresses.aggregate(
  [ {
    $group: {
      _id: {voie: "$nom_voie", commune: "$nom_commune"},
      doc: {$first: "$$ROOT"}
    }
  },
  {$replaceRoot: {newRoot: "$doc"}},
  {$out: 'UniqueIds'}
  ],
  {allowDiskUse: true }
);

问题是这种利用将很多值从一个字段转移到另一个字段,使我的数据库绝对无法使用。

{
  "_id" : ObjectId("5eea03e9a7891b6d701df571"),
  "nom_voie" : "-",
  "code_postal" : 1400,
  "nom_commune" : "Lotissement les Lilas",
  "nom_complementaire" : "",
  "lon" : 6562595.33916435,
  "lat" : 848436.205131189, 
  "field19" : "dgfip",
  ...
}

如您所见,“nom_voie”的值现在在“nom_commune”中,“x”值在“lat”中,“y”值在“lon”中,最后“nom_voie”值现在是“-” ,并且我得到了替换其他字段的新字段(“源”的“field19”)...

我是否使用了错误选项的聚合?

我获得了 4700 万个条目,这会造成一些问题吗?

感谢大家的宝贵时间,即使您只是阅读本文!

编辑 :

经过几次尝试和一些搜索,我发现是聚合函数造成了一些问题,但我仍然不明白为什么,如果有人得到一些提示,我只是编辑了文档,这样它就更容易理解和可读了!(之前我以为是函数中的 $unset 问题)

4

0 回答 0