Удаление записей без содержимого - PullRequest
0 голосов
/ 10 июля 2020

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

{_id: "subscr-01@gmail.com"
    {subscriber: {product-1: true}, {product-2: true} }.
    {publisher: {product-1: true}
}

Я знаю, как удалить подписку.

 query: {_id: "subscr-01@gmail.com"}
update: {"$unset" "publisher.product-1": {"$exists": true} }

И если в результате субдокумент останется пустым, я знаю, как найти и удалить это ( хотя и во втором вызове API ... хотелось бы знать, есть ли способ сделать как обновление, так и удаление поддокумента за один вызов API).

query: {_id: "subscr-01@gmail.com", "publisher": {} }"
update: {"$unset": {"publisher": {} }

Вот мой непосредственный вопрос: После того, как все сказано и сделано, я могу получить адреса электронной почты в коллекции без полей (без дополнительных документов).

{_id: "subscr-01@gmail.com"}

Как мне найти и удалить эти "пустые" "записи?

1 Ответ

1 голос
/ 10 июля 2020

Чтобы удалить документы, в которых нет полей subscriber и publisher, вам нужно создать запрос, который проверяет наличие этих полей. Фильтр будет выглядеть так:

{
    "subscriber": { $exists: false },
    "publisher": { $exists: false }
}

Если вы хотите удалить все документы, соответствующие этому фильтру, вы должны использовать deleteMany () .

...