Сначала создайте несколько документов одновременно

Я дал массив документов id's, которые я хочу добавить в Firestore.

let documentIds = [
  'San Francisco',
  'New York',
  'Las Vegas'
]

Каждый документ должен иметь предопределенный набор свойств.

let data = {
  country: 'US',
  language: 'English'
}

Есть ли какая-то функция внутри Firebase Admin SDK, которая может создавать все документы сразу, без повторения массива идентификаторов документов?


person André Kuhlmann    schedule 27.02.2018    source источник


Ответы (2)


Это должно помочь. Ответ Сэма даст вам хорошее представление о том, как использовать пакетную запись. Обязательно ознакомьтесь с документацией, на которую он ссылается.

Я не хочу расстраивать Сэма. Вчера он починил мой ноутбук :-)

Установка пакета с массивом

let documentIds = [
  'San Francisco',
  'New York',
  'Las Vegas'
]

let data = {country: 'US', language: 'English'}

var batch = db.batch();
documentIds.forEach(docId => {
  batch.set(db.doc(`cities/${docId}`), data);
})

batch.commit().then(response => {
  console.log('Success');
}).catch(err => {
  console.error(err);
})
person Jason Berryman    schedule 28.02.2018

Вы можете сделать пакетную запись. Вам все равно придется перебирать документы, чтобы добавить их все в пакетный объект, но это будет один сетевой вызов:

Пример:

// Get a new write batch
var batch = db.batch();

// Set the value of 'NYC'
var nycRef = db.collection("cities").doc("NYC");
batch.set(nycRef, {name: "New York City"});

// Update the population of 'SF'
var sfRef = db.collection("cities").doc("SF");
batch.update(sfRef, {"population": 1000000});

// Delete the city 'LA'
var laRef = db.collection("cities").doc("LA");
batch.delete(laRef);

// Commit the batch
batch.commit().then(function () {
    // ...
});

https://firebase.google.com/docs/firestore/manage-data/transactions#batched-writes

person Sam Stern    schedule 27.02.2018