我实际上正在使用 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 问题)