2017-01-29 16 views
0

Я получаю ниже ошибки, когда пытаюсь использовать больше или меньше, чем в mongoDB где clause: Любая идея, как этого избежать?

Response message: javax.script.ScriptException: groovy.lang.MissingPropertyException: No such property: gt for class: Script117 

Ниже мой Полный Groovy код до сих пор: Все работает за исключением больше (или ЛТ) фильтра запроса:

import com.mongodb.DB; 
import org.apache.jmeter.protocol.mongodb.config.MongoDBHolder; 
import com.mongodb.MongoClient; 
import com.mongodb.ServerAddress; 
import com.mongodb.BasicDBObject; 
import com.mongodb.DBObject; 
import com.mongodb.DBCursor; 
import com.mongodb.DBCollection; 
import com.mongodb.*; 
//====================================================================== 
MongoClient mongoClient = new MongoClient(new ServerAddress("${serverIP}", ${serverPort})); 
DB db = mongoClient.getDB("${mongodb}"); 
DBCollection coll = db.getCollection("${collectionName}"); 

StringBuilder rs = new StringBuilder(); 
rs.append("Collection: \n"); 

BasicDBObject allQuery = new BasicDBObject(); 
BasicDBObject fields = new BasicDBObject(); 
fields.put("name", 1);  //projected fields 
fields.put("age", 1);  //projected fields 
fields.put("eyeColor", 1); //projected fields 
fields.put("balance", 1); //projected fields 
BasicDBObject whereQuery = new BasicDBObject(); 
//whereQuery.put("gender", "female"); 
whereQuery.put("age", new BasicDBObject("$gt", 30)); 

DBCursor cursor = coll.find(whereQuery, fields); 
while(cursor.hasNext()) { 
     DBObject obj = cursor.next(); 
     rs.append(obj.toString()); 
     rs.append("\n"); 
} 
rs.toString(); 
//String variable at the LAST LINE of this Groovy script will be displayed in Results tab, even if no Display methods are invoked !!! 

ответ

1

Вы должны избегать:

  • Ссылаясь JMeter Переменные в ${var}
  • Использование $var структур

, поскольку они имеют особое значение в Groovy, так:

  1. Заменить эти ${serverIP} с vars.get("serverIP"), ${mongodb} с vars.get("mongodb") и т.д.
  2. Заменить двойные кавычки на одинарные кавычки, особенно в той строке, где вы используете $gt функции
  3. (опционально) с запятой в конце строки не нужно

Ссылки:

2

сообщение об ошибке: groovy.lang.MissingPropertyException, выбрасывается при :

Исключение произошло, когда динамическая отправка свойств завершилась неудачно с неизвестным свойством .

Примечание: Потерялись * Исключение классы названы по консистенции и избегать конфликтов с JDK исключениями одного и того же имени.

Попытка ввести ключ «age» в качестве значения и новый объект BasicDBObject («$ gt», 30) в качестве значения приведет к исключению, которое вы получаете, поскольку JVM ищет вызовы свойств gt, которые не существуют ,

Метод 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

Вы пробовали использовать одинарные кавычки, чтобы groovy не думал, что вы делаете строковые шаблоны?

whereQuery.put("age", new BasicDBObject('$gt', 30)) 
//         ^^here