是否可以强制转换 MongoDB 查询?
当我有两个像这样的 MongoDB 文档时...
db.test.insert( {"value" : "10123"} );
db.test.insert( {"value" : "160"} );
查询的结果是:
db.test.find({"value" :{$gt : "12"} });
是..
{ "_id" : ObjectId("4c6d1b92304326161b678b89"), "value" : "160" }
很明显,进行了字符串比较,因此不会返回我的第一个值。 有没有办法在查询中进行转换?
像这样的东西:
db.test.find({ (int) "value" :{$gt : 12} });
那就太好了。像这样的查询
db.test.find({"value" :{$gt : 12} }); // without the quotes around "12"
什么也不返回。
When I have two MongoDB documents like this...
db.test.insert( {"value" : "10123"} );
db.test.insert( {"value" : "160"} );
The result of a query like:
db.test.find({"value" :{$gt : "12"} });
is..
{ "_id" : ObjectId("4c6d1b92304326161b678b89"), "value" : "160" }
It's obvious, that a string comparison is made, so that my first value is not returned.
Is there any way to cast within the query?
Something like:
db.test.find({ (int) "value" :{$gt : 12} });
would be great. A query like
db.test.find({"value" :{$gt : 12} }); // without the quotes around "12"
returns nothing.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您可以使用以下 JavaScript 表达式:
这使用 JavaScript 从字符串到数字的自动转换。
You can use the following JavaScript expression:
This uses JavaScript's automatic conversion from string to number.
我有一个类似的解决方法,我发现如果你可以使用 mongo shell,你可以编写一个语句来在 javascript 中执行此操作,但能够使用索引。
如果您希望它比以前的解决方案运行得更快,您必须确保值字段上的索引。
I have a similar workaround, i find that if you can use the mongo shell, you can write an statement to do this in javascript, but capable of using indexes.
If you want this to run faster than previus solution, you have to ensure the index on the value field.
MongoDB 中的类型转换在版本 >=
4.0
之后可用。检查 MongoDB 的聚合运算符 $convert 和类似运算符。由于您想将string
转换为int
,您可以使用$toInt
:Test : mongoplayground
注意:
这里我们转换
value
,它是一个string
字段动态转换为int
由于它已转换为int
- 我们将其与int
类型的输入进行比较。您的输出文档仍将具有value
字段的原始类型,即string
(我们实际上并没有更改响应文档中的类型,如果需要,请使用聚合,它是阶段$project
查看响应文档中字段value
的int
值)。由于我们在
.find()
中使用聚合运算符,因此我们需要将所有内容包装在$expr
中。尽管这在当今很常见&很容易做到,但请记住,我们在每次读取时都会将
string
转换为int
,而不是如果您可以在写入或更新时处理此问题,那就很容易了更有效率。Type casting in MongoDB is available after version >=
4.0
. Check MongoDB's aggregation operator $convert and similar operators. Since you wanted to convertstring
toint
you can use$toInt
:Test : mongoplayground
Note :
Here we're converting
value
which is astring
field toint
on the fly & Since it got converted toint
- we're comparing it to input of typeint
. Your output documents will still have original type forvalue
field which isstring
(we're not actually changing type in response docs, if needed use aggregation & it's stage$project
to seeint
values for fieldvalue
in response docs).Since we're using aggregation operators in
.find()
we need to wrap everything in$expr
.Even though this is pretty common nowadays & is easy to do, but remember we're casting
string
toint
on every Read, rather if you can take care of this on Writes or Updates it would be easy & more efficient.要将 String 转换为 int 使用 this
之后你可以直接查询:
To convert String into int use this
And after that you can directly query like :
未为此用例设置 $gt。您必须对字符串使用正则表达式。创建一个以数字作为数字的新字段可能更容易。
$gt wasn't set for this use case. You would have to use regex for strings. Probably easier to just create a new field with the number as a number.