Я, вероятно, упускаю что-то очевидное, но не могу найти способ сохранить объект JSON с потомками таким образом, чтобы в БД Datastore была иерархия объектов, к которым можно обращаться. Пример кода:
const Datastore = require('@google-cloud/datastore');
const datastore = new Datastore({
projectId: 'MY_PROJECT_ID',
});
const ot1 = {
// The kind and ID for the new entity
key: datastore.key(['OT', '1']),
data: {
obj: [
{
var1: 'var1',
var2: 'var2',
},
{
var3: [{obj2:'var3'}, 'var5'],
var4: 'var4',
},
] // obj
} // data
};
datastore.save(ot1);
Если я сейчас проверю свое хранилище данных, оно содержит одну сущность 'obj' типа Array (как и ожидалось), но значением является один большой двоичный объект JSON, представляющий массив, т. Е. Я не могу углубиться в объекты-потомки (которые * 1004) *, obj[1]
, obj[1].var3
и obj[1].var3[0]
) из консоли хранилища данных (в то время как с AWS DynamoDB и тем же JSON я могу выполнить детализацию, как будто она автоматически выполняет преобразование из объектов JS в формат БД ). Тем не менее, документы указывают, что родительский объект не может быть изменен после создания объекта, поэтому родительский объект должен быть создан до дочернего объекта. Похоже, что API требует, чтобы я сохранил в несколько шагов:
- Сохранить корневой объект с пустым списком
- Сохраните каждого потомка root, установив для его родителя root (
obj
); непонятно, как добавить каждого потомка в массив; obj[1]
будет иметь пустой массив как var3
значение свойства
- Сохранить каждый элемент массива
obj[1].var3
, установив для его родителя значение obj[1]
; та же проблема с массивом
Это много работы, конечно, есть библиотечная функция, которая делает это автоматически, но я не могу ее найти. И я не уверен, как это будет выглядеть в консоли Datastore, я подозреваю, что в итоге вы получите 4 объекта, то есть иерархия будет известна только косвенно, если наблюдать родительские свойства.
Обновление : Я подозреваю, что ответ заключается в использовании ORM, такого как js-data.