Удалить данные из всех документов субколлекции с указанием состояния в пожарном депо - PullRequest
0 голосов
/ 13 октября 2018

Я хочу написать скрипт, который удаляет данные из всех документов подколлекции, где статус == истекает.У меня есть имя коллекции user_data, и эта коллекция содержит много документов, все эти документы содержат имя подколлекции My_status, и этот My_status содержит много документов, каждый документ содержит статус и, если срок действия статуса === истекает, чем удалить эти данные

Структура базы данныхэто похоже на

collection - user_data
                     document1 - Subcollection - My_status --document1- Status expire      
                                                             document2 
                                                             document3

                     document2 - Subcollection - My_status --document1 
                                                             document2--Status expire
                                                             document3

Я пробовал это, но это не работает, так как я не могу связать это с подколлекцией

// First perform the query
db.collection('user_data').where('status','==',expire).get()
.then(function(querySnapshot) {
// Once we get the results, begin a batch
    var batch = db.batch();

    querySnapshot.forEach(function(doc) {
        // For each doc, add a delete operation to the batch
        batch.delete(doc.ref);
    });

    // Commit the batch
    return.batch.commit();
}).then(function() {
  // Delete completed!
  // ...
}); 

1 Ответ

0 голосов
/ 13 октября 2018

Обновление: по состоянию на май 2019 года Cloud Firestore теперь поддерживает запросы групп сбора .

Теперь вы можете запрашивать все вложенные коллекции My_status:

db.collectionGroup('My_status').where('','==', 'expire').get()
.then(function(querySnapshot) {

Оригинальный ответ

То, что вы пытаетесь сделать сейчас, называется «запросом группы сбора», который в настоящее время не поддерживается.См. Подколлекции запросов Firestore

Если вы пытаетесь удалить все документы из подколлекций My_status для всех пользователей, вам необходимо сначала выполнить цикл по всем пользователям, а затем выполнить запроскаждая из их подколлекций:

db.collection('user_data').get()
.then(function(querySnapshot) {
  querySnapshot.forEach(function(userDocument) {
    userDocument.ref.collection("My_status").where('status','==','expire').get()
    .then(function(querySnapshot) {
      ...

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...