Как скопировать данные из одной коллекции в другую существующую коллекцию в MongoDB - PullRequest
0 голосов
/ 13 января 2020

У меня есть coll-1 и coll-2 в MongoDB. Итак, мне нужно скопировать данные из coll-1 в coll-2, не нарушая сбор данных (обе коллекции находятся в одной БД), и я не хочу делать mongoexport и mongoimport из-за большого количества этих данных. каждый раз, когда нам нужно обновить небольшие данные, мне будет удобно.

1 Ответ

0 голосов
/ 15 января 2020

Поскольку вы находитесь на mongoDB V4.2 и ваши две коллекции находятся в одной базе данных и существуют, вам нужно использовать $ merge :

Попробуйте этот запрос:

db.getCollection('coll-1').aggregate( [
   { $merge : { into: { coll: "coll-2" }, on: "_id",  whenNotMatched: "insert" } }
])

Документы в col-1:

/* 1 */
{
    "_id" : ObjectId("5e1f7ac3f35652fb779fcf3e"),
    "random1" : 1
}

/* 2 */
{
    "_id" : ObjectId("5e1f7acff35652fb779fd310"),
    "random1" : 2
}

Документы в col-2:

/* 1 */
{
    "_id" : ObjectId("5e1f7adcf35652fb779fdb42"),
    "random2" : 1
}

/* 2 */
{
    "_id" : ObjectId("5e1f7ae5f35652fb779fde24"),
    "random2" : 2
}

Результат:

/* 1 */
{
    "_id" : ObjectId("5e1f7adcf35652fb779fdb42"),
    "random2" : 1
}

/* 2 */
{
    "_id" : ObjectId("5e1f7ae5f35652fb779fde24"),
    "random2" : 2
}

/* 3 */
{
    "_id" : ObjectId("5e1f7ac3f35652fb779fcf3e"),
    "random1" : 1
}

/* 4 */
{
    "_id" : ObjectId("5e1f7acff35652fb779fd310"),
    "random1" : 2
}

Поскольку я хотел написать все от coll-1 до coll-2, у меня нет этапов агрегирования до $merge, вам нужно иметь это $merge как последний этап в конвейере агрегации (для целей тестирования вы можете фактически удалить его и проверить данные через пару dry прогонов и затем выполнить фактическую операцию). Кроме того, $merge имеет много опций, которые могут быть переданы в нескольких, например: - Что делать, если значения полей on совпадают, и несколько других опций, поэтому, пожалуйста, go в документации MongoDB.

...