Обновление Mongo DBRef при восстановлении в другой базе данных с помощью mongorestore - PullRequest
0 голосов
/ 16 января 2019

Для своего приложения я использую отдельные базы данных MongoDB для разных арендаторов.

Так что для двух арендаторов "abc" и "xyz" у меня будет две базы данных "tenant_abc" и "tenant_xyz".

Теперь мне нужно скопировать базу данных tenant_abc в базу данных tenant_xyz, но у меня проблемы с DBRefs.

Итак, я делаю:

mongodump --db tenant_abc --out /backup/

Тогда я попробую два варианта:

mongorestore --db tenant_xyz /backup/tenant_abc
mongorestore --nsFrom "tenant_abc.*" --nsTo "tenant_xyz.*" /backup

Оба решения импортируют tenant_abc в tenant_xyz, но объекты DBRef остаются прежними.

Итак, если я перечислю коллекцию в tenant_abc, я получу:

{
    "_id": "9649380a-d639-4b51-aa83-39ee42daf494",
    "label": "Group 1",
    "importance": 10,
    "entity": DBRef("Entities", "5ed723ac-bfae-49c5-a13a-b3b54316db77", "tenant_abc"),
    "type": "entity_bound",
    "deletedAt": null,
    "employees": [
        DBRef("Employees", "0222d601-b15a-46ec-a170-267ed6202937", "tenant_abc")
    ]
} {
    "_id": "13f9bf36-6e9b-494e-b1a4-c24d6d964236",
    "label": "Group 2",
    "importance": 10,
    "entity": DBRef("Entities", "9326883e-63d8-451e-8bbc-d6bef87e5a0c", "tenant_abc"),
    "type": "entity_bound",
    "deletedAt": null,
    "employees": [
    DBRef("Employees", "51dceacb-4dc7-4865-b11a-b28cb1f44f7d", "tenant_abc"),
    DBRef("Employees", "81f4d0e1-92d5-4ce1-abec-db91b40647f9", "tenant_abc"), 
    DBRef("Employees", "9296944c-7ffe-48af-8465-f38dc4687ca7", "tenant_abc"), 
    DBRef("Employees", "ecf19570-9034-4ebe-949a-a6a60578d47d", "tenant_abc"), 
    DBRef("Employees", "65f6c687-f924-4198-b997-76332916dcc2", "tenant_abc"), 
    DBRef("Employees", "435f1011-17de-46f7-a8f1-2b318649b99b", "tenant_abc"), 
    DBRef("Employees", "b222eb4d-100a-4f42-8de8-e559865779ad", "tenant_abc")
    ]
}

Мой ожидаемый результат:

{
    "_id": "9649380a-d639-4b51-aa83-39ee42daf494",
    "label": "Group 1",
    "importance": 10,
    "entity": DBRef("Entities", "5ed723ac-bfae-49c5-a13a-b3b54316db77", "tenant_xyz"),
    "type": "entity_bound",
    "deletedAt": null,
    "employees": [
        DBRef("Employees", "0222d601-b15a-46ec-a170-267ed6202937", "tenant_xyz")
    ]
} {
    "_id": "13f9bf36-6e9b-494e-b1a4-c24d6d964236",
    "label": "Group 2",
    "importance": 10,
    "entity": DBRef("Entities", "9326883e-63d8-451e-8bbc-d6bef87e5a0c", "tenant_xyz"),
    "type": "entity_bound",
    "deletedAt": null,
    "employees": [
    DBRef("Employees", "51dceacb-4dc7-4865-b11a-b28cb1f44f7d", "tenant_xyz"),
    DBRef("Employees", "81f4d0e1-92d5-4ce1-abec-db91b40647f9", "tenant_xyz"), 
    DBRef("Employees", "9296944c-7ffe-48af-8465-f38dc4687ca7", "tenant_xyz"), 
    DBRef("Employees", "ecf19570-9034-4ebe-949a-a6a60578d47d", "tenant_xyz"), 
    DBRef("Employees", "65f6c687-f924-4198-b997-76332916dcc2", "tenant_xyz"), 
    DBRef("Employees", "435f1011-17de-46f7-a8f1-2b318649b99b", "tenant_xyz"), 
    DBRef("Employees", "b222eb4d-100a-4f42-8de8-e559865779ad", "tenant_xyz")
    ]
}

Как я могу заменить все DBRef (которые используются во многих местах, иногда вложенные в несколько уровней) с правильными значениями?

...