MongoDB $ regex запрос к числу не удается - PullRequest
0 голосов
/ 30 января 2019

Я сохранил информацию в этом формате на моем MongoDB

{
  name: 'Eric',
  account: 13310
},
{
  name: 'Ivan',
  account: 12120
}

Это мое предложение noSQL

db.users.find( "account": { $regex: /13/, $options: 'i' } );

Но я получил ошибку

Error: error: {
        "ok" : 0,
        "errmsg" : "$regex has to be a string",
        "code" : 2,
        "codeName" : "BadValue"
}

КакМогу ли я сделать запрос, я хочу найти все, что содержит «13» по индексу account.Я читал о синтаксическом разборе account index для String, но в коллекции более 100 тыс. Документов, это не так.

Я ищу это предложение SQL

SELECT * FROM USERS WHERE ACCOUNT LIKE '%13%'

Ответы [ 3 ]

0 голосов
/ 31 января 2019

Как вы видели, $regex работает только со строковыми полями;так как account является числовым полем, ваш запрос не выполняется.Начиная с MongoDB 4.0, вы можете использовать агрегатный конвейер для динамического добавления $toString версии account, для которой вы запрашиваете регулярное выражение:

db.users.aggregate([
    {$addFields: {accountStr: {$toString: '$account'}}},
    {$match: {accountStr: /13/}}
])

Альтернативой может бытьхранить строковую копию поля account в ваших документах, которые вы можете использовать напрямую.

0 голосов
/ 31 января 2019

Попробуйте это, братан.

db.users.find( "account": { $regex: new RegExp( '^13' ), $options: 'i' } );
0 голосов
/ 30 января 2019

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

db.users.find({"account": { $regex: /^13/ } });

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

db.users.insert([{
  name: 'Eric',
  account:'13310'
},
{
 name: 'Ivan',
 account:'12120'
}])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...