Искать нулевые завершающие символы в базе данных Mongo v3.0.11?

У нас есть несколько строк в экземпляре MongoDB, которые содержат символы, завершающиеся нулем, и нам нужно найти, какие именно. Зная, что Mongo использует регулярное выражение PCRE, мы обнаружили (Может ли регулярное выражение PCRE соответствовать нулевому символу?) правильный синтаксис для соответствия символу, завершающемуся нулем, и искал его следующим образом:

db.updates_v2.find({'longDescription': /.*\x00.*/ }).count()

Однако это возвращает 0. Мы точно знаем, что там есть нулевые завершающие символы, потому что во время миграции в DocumentDB он отказывается их принимать. Кроме того, мы выполнили следующий запрос, подтверждающий, что виновником является longDescription:

db.updates_v2.find().forEach(function(doc){
... for (var key in doc) {
...     if ( /.*\x00.*/.test(doc[key]) )
... print(key)
... }
... });
longDescription
longDescription
longDescription
...

Я также протестировал регулярное выражение в узле (хотя и с другим механизмом регулярных выражений):

> test = "wot wot in the \0"
'wot wot in the \u0000'
> test2 = "wot wot in the wat"
'wot wot in the wat'
> regex = /.*\x00.*/
> test2.match(regex)
null
> test.match(regex)
[ 'wot wot in the \u0000',
  index: 0,
  input: 'wot wot in the \u0000',
  groups: undefined ]

Это проблема при переходе с mongodb на aws-documentdb, так как последний не принимает символы \0 в строках.

Нам действительно нужно иметь возможность надежно вытащить их, чтобы создать сценарий, который может find оскорблять записи, удалять пустые символы и update записи. Любые идеи?


person Jansky    schedule 25.07.2019    source источник
comment
Поскольку в последнее время это вызвало некоторые мнения: мы так и не нашли решения этой проблемы, и это помешало нам перейти с MongoDB.   -  person Jansky    schedule 12.05.2020