MongoDB: как разделить коллекцию на n коллекций?

Как разделить общую коллекцию на n коллекций?

Неважно, если это не точный метод, то есть, если целевая коллекция имеет 1000 документов и n=2 мне все равно, если одна коллекция имеет 501 документ, а другая 499.

Всего 1 ответ


Вот простой и нелегкий способ скрипта, который вы можете запустить из командной строки, например, mongo --host yourhost thisScript.js :

target = 3;

max = db.foo.count();

approx = Math.ceil(max / target);

n = 0;
i = 0;
c = db.foo.find();
while(c.hasNext()) {
    d = c.next();
    if(0 == i % approx) {
      n++;
    }
    i++;
    db['foo_'+n].insert(d);
}

Немного сложнее, но значительно быстрее: используйте массовые операции:

target = 3;

max = db.foo.count();

approx = Math.ceil(max / target);

n = 0;
i = 0;
bulk = null;
c = db.foo.find();
while(c.hasNext()) {
    d = c.next();
    if(0 == i % approx) {
        if(bulk != null) {
           bulk.execute();
        }
        n++;
        bulk = db['foo_'+n].initializeOrderedBulkOp();
    }
    i++;
    bulk.insert(d);
}
if(bulk != null) {
    bulk.execute();
}

Есть идеи?

10000