MongoDB $ regex查询编号失败

时间:2019-01-30 20:25:06

标签: regex mongodb

我将这种格式的信息存储在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"
}

如何进行查询,我想在account索引中找到包含“ 13”的任何内容。我读过有关解析account到String的索引的信息,但是,该集合有超过100K个文档,不是这样。

我正在寻找此SQL语句

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

4 个答案:

答案 0 :(得分:1)

如您所见,$regex仅适用于字符串字段;因此,由于account是一个数字字段,因此查询失败。从MongoDB 4.0开始,您可以使用聚合管道来动态添加要使用正则表达式查询的account的{​​{3}}版本:

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

另一种选择是将account字段的字符串副本存储在您可以直接使用的文档中。

答案 1 :(得分:0)

请参阅我更正了语法。让我知道这是否有效。

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

我用两个文档创建了一个样本集合,并运行了上面的查询,它没有带来任何值,但是当我将数字转换为字符串并插入文档并运行查询时,它获取了数据,因此该帐户值应为字符串(用引号引起来)

db.users.insert([{
  name: 'Eric',
  account:'13310'
},
{
 name: 'Ivan',
 account:'12120'
}])

答案 2 :(得分:0)

试试这个兄弟。

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

答案 3 :(得分:-1)

我遇到了同样的问题,但是我找到了解决方法

像这样使用:

“帐户”:“ / [A-z] * 13 / i”