Удалить документы, где значение не является массивом - PullRequest
0 голосов
/ 28 июня 2018

Кажется, что mongodb позволяет использовать тот же синтаксис для удаления документов, где значение является единственным значением и всякий раз, когда значение присутствует в коллекции:

Это

db.SomeCollection.deleteMany({UserId: 12345});

Может влиять на {UserId: 12345} и {UserId: [12345, 67895, 87897]}.

Я понимаю, что эта схема не идеальна; мы используем единственную опору UserId для обозначения как одного идентификатора int, так и массива целых чисел. Тем не менее, я унаследовал базу данных, которая использует динамический характер mongodb, если вы поймете мой дрейф.

Какой самый безопасный способ выполнить запрос deleteMany, указав, что я хочу удалять документы только в том случае, если значением является одно целое число?

1 Ответ

0 голосов
/ 28 июня 2018

Вы можете использовать оператор $ type для проверки типа поля, но в этом случае это не так очевидно. Вы не можете проверить, имеет ли UserId тип double, потому что MongoDB укажет, что массив двойников также удваивается (больше здесь ). Поэтому вам нужно инвертировать логику и проверить, не являются ли документы, которые вы пытаетесь удалить, массивом (введите 4):

db.SomeCollection.deleteMany({ $and: [ { UserId: 12345 }, { UserId: { $not: { $type: 4 } } } ] })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...