带有多行字符串参数的 doEval()
doEval() With Multiline String Argument
使用 Groovy 2.3.6,GMongo 1.2,Java 1.8,MongoDB 3.0.0...
我正在尝试使用 doEval()
来计算集合中的文档数。 (出于各种原因,我想使用 doEval()
而不是 count()
)。使用单行字符串参数 returns retval 调用 doEval()
,double 值为 1.0,double 值为 1.0,这正是我所期望的:
def str = "db.configurations.count({name: 'Mike'})"
database.doEval(str)
如果参数在多行上,returned 的 retval 为 null(ok 为 1.0)。
def str = "db.configurations.count({\nname: 'Mike'\n})"
database.doEval(str)
我希望 doEval 到 return 1.0 的 retval 不为空,就像在第一个示例中一样。这是错误还是我的期望不正确? doEval()
应该支持多行字符串参数吗?
来自 doEval()
javadoc:
Evaluates JavaScript functions on the database server. This is useful
if you need to touch a lot of data lightly, in which case network
transfer could be a bottleneck.
Parameters:
code
- String representation of JavaScript function
args
- arguments to pass to the JavaScript function
所以您没有将 javascript 函数传递给 doEval
方法。无论如何,您得到的结果与直接调用 mongo shell:
的结果一致
> db.eval("db.configurations.count({name: 'Mike'})");
1
> db.eval("db.configurations.count({\nname: 'Mike'\n})");
null
(我没有深入挖掘 mongo shell javascript 内部结构...:-)
传递一个javascript函数你可以得到你想要的结果:
println db.configurations.count([name: 'Mike'])
def str = '''function(name) {
return db.configurations.count({
name: name
});
}'''
println db.doEval(str, 'Mike')
以上结果:
1
[serverUsed:/127.0.0.1:27017, retval:1.0, ok:1.0]
使用 Groovy 2.3.6,GMongo 1.2,Java 1.8,MongoDB 3.0.0...
我正在尝试使用 doEval()
来计算集合中的文档数。 (出于各种原因,我想使用 doEval()
而不是 count()
)。使用单行字符串参数 returns retval 调用 doEval()
,double 值为 1.0,double 值为 1.0,这正是我所期望的:
def str = "db.configurations.count({name: 'Mike'})"
database.doEval(str)
如果参数在多行上,returned 的 retval 为 null(ok 为 1.0)。
def str = "db.configurations.count({\nname: 'Mike'\n})"
database.doEval(str)
我希望 doEval 到 return 1.0 的 retval 不为空,就像在第一个示例中一样。这是错误还是我的期望不正确? doEval()
应该支持多行字符串参数吗?
来自 doEval()
javadoc:
Evaluates JavaScript functions on the database server. This is useful if you need to touch a lot of data lightly, in which case network transfer could be a bottleneck.
Parameters:
code
- String representation of JavaScript function
args
- arguments to pass to the JavaScript function
所以您没有将 javascript 函数传递给 doEval
方法。无论如何,您得到的结果与直接调用 mongo shell:
> db.eval("db.configurations.count({name: 'Mike'})");
1
> db.eval("db.configurations.count({\nname: 'Mike'\n})");
null
(我没有深入挖掘 mongo shell javascript 内部结构...:-)
传递一个javascript函数你可以得到你想要的结果:
println db.configurations.count([name: 'Mike'])
def str = '''function(name) {
return db.configurations.count({
name: name
});
}'''
println db.doEval(str, 'Mike')
以上结果:
1
[serverUsed:/127.0.0.1:27017, retval:1.0, ok:1.0]