Я фактически создаю панель веб-сайта с автозаполнением, используя 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_vo ie') и название города ('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_vo ie» теперь находится в «nom_commune», значение «x» находится в «lat ", и значение" y "находится в" lon "и, наконец, значение" nom_vo ie "теперь равно" - ", и я получил новые поля, заменяющие другие (" field19 "вместо" source ") ...
Я использую агрегат с неправильной опцией?
Я получил 47 миллионов записей, это создает какие-то проблемы?
Спасибо всем за ваше время, даже если вы просто читаете это!
РЕДАКТИРОВАТЬ:
После нескольких попыток и некоторого поиска я обнаружил, что именно агрегатная функция создает некоторые проблемы, но я до сих пор не понимаю, почему, если у кого-то есть подсказки , я только что отредактировал do c, чтобы он стал более понятным и читаемым! (Раньше я думал, что это $ неустановленная проблема в функции)