我将这种格式的信息存储在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%'
答案 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”