gpt4 book ai didi

java - 带有多行字符串参数的 doEval()

转载 作者:行者123 更新时间:2023-11-30 08:16:12 26 4
gpt4 key购买 nike

使用 Groovy 2.3.6、GMongo 1.2、Java 1.8、MongoDB 3.0.0...

我正在尝试使用doEval()来获取集合中的文档计数。 (出于各种原因,我想使用 doEval() 而不是 count())。使用单行字符串参数调用 doEval() 将返回 retval,其 double 值为 1.0,而 ok 则返回 double 值 1.0,这正是我所期望的:

def str = "db.configurations.count({name: 'Mike'})"
database.doEval(str)

如果参数位于多行,则返回的 retval 为 null(ok 为 1.0)。

def str = "db.configurations.count({\nname: 'Mike'\n})"
database.doEval(str)

我希望 doEval 返回 retval 1.0,而不是 null,就像第一个示例一样。这是一个错误还是我的期望不正确? 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]

关于java - 带有多行字符串参数的 doEval(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29634138/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com