Удалите все документы / записи при удалении пользователя [дубликат]

Flexbox - это «одномерная» система компоновки: она может выравнивать элементы вдоль горизонтальных или вертикальных линий.

Истинная сетка «2-мерная»: она может выравнивать элементы вдоль горизонтальной и вертикальной линий. Другими словами, ячейки могут располагаться между столбцами и строками, которые невозможно выполнить с помощью flexbox.

Вот почему flexbox имеет ограниченную емкость для построения гридов. Это также является причиной того, что W3C разработал еще одну технологию CSS3, Grid Layout (см. Ниже).


В контейнере flex с flex-flow: row wrap элементы гибкости должны быть завернуты к новым строкам .

Это означает, что элемент гибкости нельзя обернуть под другим элементом в той же строке .

Обратите внимание, что div # 3 обертывается ниже div # 1 , создавая новую строку. Он не может упасть ниже div # 2 .

В результате, когда элементы не самые высокие в строке, остается пустое пространство, создавая неприглядные пробелы.

image credit: Jefree Sujit


column wrap Решение

Если вы переключитесь на flex-flow: column wrap, элементы гибки будут стекаться вертикально, а сетчатая компоновка более достижима. Однако контейнер с колоновым направлением имеет три потенциальные проблемы сразу:

  1. Он расширяет контейнер горизонтально, а не вертикально (например, макет Pinterest).
  2. Это требует, чтобы контейнер имел фиксированную высоту, поэтому элементы знают, где их можно обернуть.
  3. На момент написания этой статьи у него есть недостаток во всех основных браузерах, где контейнер не работает 't расширяться для размещения дополнительных столбцов .

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


Другие решения

33
задан Nick Parsons 16 January 2013 в 01:39
поделиться

3 ответа

Это один из основных вариантов использования промежуточного программного обеспечения Mongoose 'remove' .

clientSchema.pre('remove', function(next) {
    // 'this' is the client being removed. Provide callbacks here if you want
    // to be notified of the calls' result.
    Sweepstakes.remove({client_id: this._id}).exec();
    Submission.remove({client_id: this._id}).exec();
    next();
});

Таким образом, когда вы вызываете client.remove(), это промежуточное программное обеспечение автоматически вызывается очистить зависимости.

85
ответ дан JohnnyHK 22 August 2018 в 03:48
поделиться
  • 1
    Нет, вы бы назвали это на объекте Schema, который использовался для определения модели Client до создания модели с помощью вызова mongoose.model или db.model. – JohnnyHK 16 January 2013 в 18:34
  • 2
    Работала отлично, когда я переместил ее в файл определения схемы (модель). Однако мне пришлось добавить .exec () в конец вызовов на удаление. В этом нет вреда, верно? – Nick Parsons 16 January 2013 в 19:11
  • 3
    Вы правы, вам нужно сделать это с помощью remove, когда вы не выполняете обратный вызов. Я обновил ответ. – JohnnyHK 16 January 2013 в 19:38
  • 4
    – inquisitive 22 April 2015 в 11:35
  • 5
    @Inquisitive Правильно, крючок не будет вызываться в этом случае. Он вызывается только при вызове remove в экземпляре doc. – JohnnyHK 22 April 2015 в 12:46

Другим способом я нашел

submissionSchema.pre('remove', function(next) {
    this.model('Client').remove({ submission_ids: this._id }, next);
    next();
});
0
ответ дан Sam Bellerose 22 August 2018 в 03:48
поделиться

Если ваши ссылки хранятся иначе, скажем, client имеет массив из submission_ids, то аналогично принятому ответу вы можете определить следующее на submissionSchema:

submissionSchema.pre('remove', function(next) {
    Client.update(
        { submission_ids : this._id}, 
        { $pull: { submission_ids: this._id } },
        { multi: true })  //if reference exists in multiple documents 
    .exec();
    next();
});

, который удалит идентификатор отправки из ссылочных массивов клиентов в submission.remove().

3
ответ дан Talha Awan 22 August 2018 в 03:48
поделиться
  • 1
    Пожалуйста, не могли бы вы привести пример с помощью OneToMany? Я не прав, если этот код удалит всех дочерних элементов и обновит ссылку и родителя. – Francis Rodrigues 14 February 2018 в 15:55
  • 2
    Не уверен, что я понял ваш комментарий. Но позвольте мне объяснить мой ответ на примере. Скажем, есть 3 клиентских документа: C1, C2, C3. И есть количество документов для представления, один из них - S273. Теперь идентификатор S273 существует в submission_ids для C1 и C3 (OneToMany, то есть у Клиента много представлений). Мой ответ выше описывает сценарий, в котором вы хотите удалить S273. Когда вы это сделаете, идентификатор S273 будет удален из submission_ids как C1, так и C3. – Talha Awan 14 February 2018 в 20:30
  • 3
    Ну .. Я понял, что submissionSchema является дочерней коллекцией, на которую ссылаются Client schema вправо? – Francis Rodrigues 14 February 2018 в 23:12
  • 4
    Да. Это "hasMany" путь. Клиент имеет массив из множества идентификаторов представления. Другой «принадлежит», в котором каждый документ для подачи имеет один идентификатор клиента, к которому он принадлежит. – Talha Awan 15 February 2018 в 13:11
  • 5
    @FrancisRodrigues, потому что он связан с NoSql not Mongoose (который является только библиотекой узлов / оболочкой для mongodb, чтобы облегчить развитие). Я не уверен, что у mongodb есть раздел, чтобы объяснить это, но couchbase (еще один NoSql db) имеет супер-информативные документы, объясняющие это подробно. developer.couchbase.com/documentation/server/4.6/data-modeling/… , developer.couchbase.com/documentation/server/3.x/developer/… , developer.couchbase.com/documentation/server/3.x/developer/… – Talha Awan 16 February 2018 в 13:06
Другие вопросы по тегам:

Похожие вопросы: