Найти отличное поле в нескольких одинаковых коллекциях mongodb - PullRequest
0 голосов
/ 17 марта 2020

У меня есть 7 коллекций в одной базе данных, которые являются одинаковыми , и я должен найти уникальное поле в этих коллекциях и сосчитать его или показать в новой коллекции с именем result.

Я пробовал поиск, но он не работал. Кто-нибудь может подсказать мне, как выполнить работу?

Это 7 коллекций: 20200309-20200310-20200311-20200312-20200313-20200314-20200315 и result - это коллекция для хранения результата запроса.

col : 20200309 
{
    "_id" : ObjectId("5e6f7c7c0371c86b8737628b"),
    "sid" : 13328,
    "trans-id" : "PROV_158374123364907198165",
    "status" : "1",
    "base-price-point" : "6000",
    "msisdn" : "989115506327",
    "keyword" : "",
    "validity" : 0,
    "next_renewal_date" : "",
    "shortcode" : "",
    "billed-price-point" : "",
    "trans-status" : 0,
    "chargeCode" : "AVMREWCAVMAW6000",
    "datetime" : "2020-03-09 11:37:13.649",
    "event-type" : "1.5",
    "channel" : "system"
}

{
    "_id" : ObjectId("5e6f7c7c0371c86b8737628c"),
    "sid" : 13328,
    "trans-id" : "PROV_158374123384007267165",
    "status" : "1",
    "base-price-point" : "6000",
    "msisdn" : "989107351827",
    "keyword" : "",
    "validity" : 0,
    "next_renewal_date" : "",
    "shortcode" : "",
    "billed-price-point" : "",
    "trans-status" : 0,
    "chargeCode" : "AVMREWCAVMAW6000",
    "datetime" : "2020-03-09 11:37:13.840",
    "event-type" : "1.5",
    "channel" : "system"
}
 col : 20200310 
{
    "_id" : ObjectId("5e6f7d140371c86b873e6bce"),
    "sid" : 13328,
    "trans-id" : "PROV_158383144246275616515",
    "status" : "1",
    "base-price-point" : "6000",
    "msisdn" : "989909789746",
    "keyword" : "",
    "validity" : 0,
    "next_renewal_date" : "",
    "shortcode" : "",
    "billed-price-point" : "",
    "trans-status" : 0,
    "chargeCode" : "AVMREWCAVMAW6000",
    "datetime" : "2020-03-10 12:40:42.462",
    "event-type" : "1.5",
    "channel" : "system"
}
{
    "_id" : ObjectId("5e6f7d140371c86b873e6bcf"),
    "sid" : 13328,
    "trans-id" : "PROV_158382430015338271227",
    "status" : "1",
    "base-price-point" : "6000",
    "msisdn" : "989901812412",
    "keyword" : "",
    "validity" : 0,
    "next_renewal_date" : "",
    "shortcode" : "",
    "billed-price-point" : "",
    "trans-status" : 0,
    "chargeCode" : "AVMREWCAVMAW6000",
    "datetime" : "2020-03-10 10:41:40.153",
    "event-type" : "1.5",
    "channel" : "system"
}

и есть 5 коллекций, как указано выше

1 Ответ

0 голосов
/ 17 марта 2020

Следующий скрипт может использоваться для получения различных msisdn значений в массиве и количестве. Запустите сценарий из оболочки mon go .

. Для эффективной работы необходим индекс по двум полям msisdn и status как: { status: 1, msisdn: 1}. Индекс должен быть создан для всех коллекций. Обратите внимание, что индексы не требуются в случае, если в коллекциях всего несколько тысяч документов.

collections = [ "20200309", "20200310", // ... ]
combined = [ ]

for (let coll of collections) {
  combined = combined.concat( db.getCollection(coll).distinct( "msisdn", { status: "1" } ) )
}

combined = [...new Set(combined) ]
print('Combined count:', combined.length)

Оператор combined = [...new Set(combined) ] удаляет дубликаты из объединенных различных значений из семи коллекций.

...