Firestore: не удалось сериализовать объект типа ArrayUnionTransform - PullRequest
0 голосов
/ 25 декабря 2018

Я пытаюсь обновить элементы в массиве, используя пример документации Firestore:

https://firebase.google.com/docs/firestore/manage-data/add-data#update_elements_in_an_array

var admin = require('firebase-admin');

var washingtonRef = firestore.collection('cities').doc('DC');

var arrUnion = washingtonRef.update({
  regions: admin.firestore.FieldValue.arrayUnion('greater_virginia')
});

Однако, когда я делаю это, я получаю следующую ошибку:

Error: Update() requires either a single JavaScript object or an 
alternating list of field/value pairs that can be followed by an 
optional precondition. Argument "dataOrField" is not a valid Document. 
Couldn't serialize object of type "ArrayUnionTransform" (found in field 
regions). Firestore doesn't support JavaScript objects with custom 
prototypes (i.e. objects that were created via the "new" operator).

1 Ответ

0 голосов
/ 26 декабря 2018

Убедитесь, что вы используете правильный SDK.

Причина, по которой это не сработало, заключалась в том, что моя ссылка на firestore.collection('cities').doc('DC'); фактически исходила отсюда:

const Firestore = require('@google-cloud/firestore'); // this is the wrong SDK.

const firestore = new Firestore({
  projectId: 'my-project'
  keyFilename: fbKeyFile
});

Как говоритсяна README.md это неправильно:

Приложения, использующие Google Server SDK, не должны использоваться в среде конечного пользователя, например на телефонах или на общедоступных веб-сайтах.Если вы разрабатываете веб-приложение или приложение Node.js, которое обращается к Cloud Firestore от имени конечных пользователей, используйте Firebase Client SDK.

Для этого, чтобы он заработал, я просто переключил следующее:

firestore.collection('cities').doc('DC');
// to
FirebaseAdmin.firestore().collection('cities').doc('DC');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...