使用Groovy 2.3.6,GMongo 1.2,Java 1.8,MongoDB 3.0.0 ...
我正在尝试使用doEval()
获取集合中文档的数量。 (出于各种原因,我想使用doEval()
而不是count()
)。用单行字符串参数调用doEval()
返回的retval的双精度值为1.0,好的返回的双精度值为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会返回1.0的retval而不是null,就像在第一个示例中一样。这是错误还是我的期望不正确?
doEval()
是否应该支持多行字符串参数? 最佳答案
从doEval()
javadoc:
评估数据库服务器上的JavaScript函数。这很有用
如果您需要轻触大量数据,在这种情况下
转移可能是瓶颈。
参数:
code
-JavaScript函数的字符串表示形式
args
-传递给JavaScript函数的参数
因此,您没有将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]