Как разбить коллекцию mongodb на несколько коллекций на основе поля - PullRequest
0 голосов
/ 20 июня 2020

У меня есть одна коллекция в mon go, и я хотел бы разделить эту коллекцию на несколько коллекций на основе ключа / поля «source». Значение "source" должно быть новым именем коллекции с документами, которые относятся к этому источнику.

{
"name": "Name"
"ph": {"phone": "1111"}
"source": "source1"
},
{
"name": "Name Last"
"ph": {"phone": "2121"}
"source": "source2"
}

Как я могу добиться этого на самом mongodb? Заранее спасибо

1 Ответ

0 голосов
/ 20 июня 2020

Для этого вы можете запустить приведенный ниже сценарий на Mongo Shell.

var collectionName = "<CollectionName>"
var distinctValues = db.getCollection(collectionName).distinct("source")
var count = 0;
for (var i = 0; i < distinctValues.length; i++) {
    var newCollectionName = collectionName.concat("_".concat(distinctValues[i]))
    db.getCollection(collectionName).aggregate([
        {
            "$match": {
                "source": distinctValues[i]
            }
        },
        {
            "$out": newCollectionName
        }
    ], {
        allowDiskUse: true
    });
    printjson(++count);
}
printjson("DONE!!!")
...