当我尝试使用大于或小于mongoDB where子句时,我得到了以下错误:任何想法如何避免这种情况?
document
以下是我的Full Groovy Code到现在为止: 一切都有效,除了GREATER THAN(或lt)查询过滤器:
Response message: javax.script.ScriptException: groovy.lang.MissingPropertyException: No such property: gt for class: Script117
答案 0 :(得分:2)
错误消息:groovy.lang.MissingPropertyException,在以下情况下抛出:
动态属性调度失败时发生异常 不明财产。
注意: Missing * Exception 类的命名是为了保持一致性,以避免与同名的JDK异常冲突。
尝试插入"年龄"作为键和新的BasicDBObject(" $ gt",30)作为一个值,导致你得到的异常,因为JVM查找属性调用gt不存在。
put方法意味着:在此对象中设置名称/值对。 在代码中,您打算附加搜索条件,而不是将其添加。
与您所拥有的代码相关,我建议将 put 方法的使用替换为追加。
这是你的代码:
BasicDBObject whereQuery = new BasicDBObject();
//whereQuery.put("gender", "female");
whereQuery.put("age", new BasicDBObject("$gt", 30));
如果替换:
whereQuery.put("age", new BasicDBObject("$gt", 30));
使用:
whereQuery.append("age", new BasicDBObject("$gt", 30));
您可以使用的另一个建议是 Criteria.where 语法, 这更具可读性。
def query = Query.query(Criteria.where('gender').is('female').and('age')
.gt(30))
collection.find(query, fields)
另一个小问题,因为您的代码是用Groovy编写的,所以不应该用;
完成每一行答案 1 :(得分:2)
您是否尝试使用单引号,因此groovy并不认为您正在进行字符串模板化?
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
runOnUiThread(new Runnable() {
@Override
public void run() {
// AlertDialog, etc.
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (!response.isSuccessful()) {
onFailure(call, new IOException("Unexpected code: " + response));
}
// else success
}
});
答案 2 :(得分:1)
你应该避免:
${var}
$var
结构因为它们在Groovy中具有特殊含义,所以:
${serverIP}
替换为vars.get("serverIP")
,${mongodb}
替换为vars.get("mongodb")
等。$gt
函数参考文献: