#mongodb #realm #realm-mobile-platform #realm-migration
#mongodb #realm #realm-мобильная платформа #область-миграция
Вопрос:
Я пытаюсь перейти из устаревшей области в область MongoDB, и у меня возникают проблемы с переносом данных с отношениями.
Пример схемы:
{
name: 'Location',
primaryKey: '_id',
properties: {
_id: 'string',
_partition: 'string?',
Name: 'string',
WorkTime: 'WorkTime[]',
},
}
{
name: 'WorkTime',
primaryKey: '_id',
properties: {
_id: 'string',
_partition: 'string?',
Day: 'string?',
Open: 'string?',
Closed: 'string?',
},
}
В каком формате я должен отправить json в MongoDB Atlas, чтобы он связывался со связанными данными?
Я попытался добавить идентификаторы (со строкой раздела и без нее) из моей WorkTime
коллекции, следуя https://docs.mongodb.com/manual/tutorial/model-referenced-one-to-many-relationships-between-documents/
Пример JSON:
{
"_id":"adaaade7-2b4f-5342-92a1-f00857a61253"
"_partition":"TestPartition",
"Name":"Test",
"WorkTime":[
{
"_partition":"TestPartition",
"_id":"1229ac83-f390-00e3-14a7-ffa9f8eb36e4"
},
{
"_partition":"TestPartition",
"_id":"9af60ff2-064b-3f09-6621-e7f949b003be"
},
{
"_partition":"TestPartition",
"_id":"04c33a8c-5e59-45ab-fbf8-e70446324475"
},
],
}
И когда я пытаюсь извлечь данные из realm ( realm.objects('Location')
), я ничего не получаю. Местоположения отображаются только тогда, когда WorkTime
они пусты.
Я также попытался передать весь WorkTime
объект вместо идентификатора, но затем он создает копию полного объекта.
Комментарии:
1. Вам не нужно много делать, чтобы перенести файл Realm для использования с MongoDB Realm. Объекты должны иметь _id, что вы и сделали, а затем вы можете включить свойство PartitionKey в фактический объект. Это также должно быть определено в консоли Realm. Какое отношение raw JSON имеет к процессу миграции?
2. Мне нужно перенести данные из устаревшей области в MongoDB Atlas docs.realm.io/realm-legacy-migration-guide/#migrating-data
Ответ №1:
Я понимаю, что объекты, на которые ссылаются, должны быть строками идентификаторов, как в примере. https://docs.mongodb.com/manual/tutorial/model-referenced-one-to-many-relationships-between-documents/
Итак, если у вас есть
{
"_id":"adaaade7-2b4f-5342-92a1-f00857a61253"
"_partition":"TestPartition",
"Test": {"_id":"9af60ff2-064b-3f09-6621-e7f949b003be", "_partition":"TestPartition"},
"WorkTime":[
{
"_partition":"TestPartition",
"_id":"1229ac83-f390-00e3-14a7-ffa9f8eb36e4"
},
],
}
должен быть преобразован в
{
"_id":"adaaade7-2b4f-5342-92a1-f00857a61253"
"_partition":"TestPartition",
"Test": "9af60ff2-064b-3f09-6621-e7f949b003be",
"WorkTime":[
"1229ac83-f390-00e3-14a7-ffa9f8eb36e4"
],
}
Оставляя только идентификаторы в виде строк.
Я рекурсивно повторил объекты, удалил неидентифицированные реквизиты вложенных объектов, заменил Id на _id и добавил ключ раздела. После этого вам нужно заменить вложенные объекты на string {"_id":"9af60ff2-064b-3f09-6621-e7f949b003be"} -> 9af60ff2-064b-3f09-6621-e7f949b003be
.
Комментарии:
1. Вам действительно не нужно проходить через эти вращения, если вы не используете синхронизацию на основе запросов, которая не была указана в вопросе. В основном это относится только к ситуациям синхронизации на основе устаревших запросов, «Если ваше приложение разработано с устаревшей синхронизацией на основе запросов» из руководства . Если ваши файлы являются локальными (или полностью синхронизированы), вы можете перейти на новый SDK, добавить ключи _id и partition, обновить свой код для подключения (если синхронизируется), и все готово.
2. Да, я использую полную синхронизацию. Какими будут точные шаги для переноса данных? 1) откройте область устаревшей синхронизации, чтобы она загружала файлы 2) замените id на _id и добавьте _partition в модель 3) обновите до области 10 4) откройте область синхронизации mongodb с соответствующим значением partitionValue (если оно было
realmUrl/test
в legacy, должно ли оно быть/test
или толькоtest
в mongo)? 5) данные будут перенесены автоматически?3. Я не знаю, какими были ваши предыдущие версии, но вы можете просто открыть файл realm с помощью Realm Studio, чтобы обновить его. Я бы сделал копию вашего локального файла и попробовал это. В противном случае имейте в виду, что переход в область MongoDB имеет другую локальную файловую структуру. Так, например, у вас мог быть вызван локальный файл
default.realm
, который был полностью синхронизирован с облаком устаревшей области. При использовании MongoDB Realm структура будет сильно отличаться, поскольку каждый файл «realm» хранится по разделам.4. Я использую версию 6.1.5. Мои синхронизированные файлы
realm-object-serverguid
без расширения, с . заблокируйте или очистите папки. Это действительно сбивает с толку, я думал, что realm studio может работать только с устаревшими файлами. Пошаговое руководство было бы действительно полезным (что-то похожее на то, что я написал в своем предыдущем комментарии).5. Сервер / браузер объектов legacy Realm будет работать только с файлами legacy Realm. Затем он стал Realm Studio, который будет работать только с устаревшими файлами. Как только Realm Studio (прокрутите вниз, чтобы прочитать новости выпуска) была обновлена до версии 4.0.0, она будет работать с новыми файлами (формат файла v10), а также обновлять старые файлы.