私は実際にExpress jsとmongodb 4.2.7を使用してオートコンプリートWebサイトバーを作成し、緯度と経度を使用してジオコーディング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"
}
ご覧のとおり、私の Web サイトの目的には必要のないフィールドがたくさんあります。そして何よりも、通りの番号ごとに 1 つの行を取得する必要はありません。通りの一意の名前が 1 つあれば十分です。そこで、重複する通り名 (「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」の値は「-」になります。 、そして他のフィールドを置き換える新しいフィールドを取得しました(「ソース」の「フィールド19」)...
間違ったオプションで集計を使用していますか?
47 Millions のエントリを取得しましたが、これにより問題が発生していますか?
これを読んだだけでも、お時間をいただきありがとうございます。
編集 :
いくつかの試行といくつかの検索の後、いくつかの問題を引き起こすのは集計関数であることがわかりましたが、誰かがヒントを得た場合、ドキュメントを編集してより理解しやすく読みやすくした理由はまだわかりません! (以前は関数の $unset 問題だと思っていました)