代码之家  ›  专栏  ›  技术社区  ›  Ankit

使用jmeter中的groovy在MongoDB中查找聚合

  •  1
  • Ankit  · 技术社区  · 6 年前

    我在MongoDB有两个收藏。我使用jmeter中的jsr223采样器在MongoDB上执行查找操作。
    数据库名称: 数据库
    集合名称: CY1,CY2

    在MongoDB中执行查找聚合的groovy代码。

    c_1.insert(new BasicDBObject(["id" : 1, "name" : "abc", "lastName" : "kumar",  "companyId": 10]))  
    
    c_2.insert(new BasicDBObject(["id" : 10, "companyName" : "Microsoft", "numEmployee" : 100 ]))  
    
    // build the $lookup operations  
    DBObject lookupFields = new BasicDBObject("from", "c_2");  
    lookupFields.put("localField", "companyId");  
    lookupFields.put("foreignField", "id");  
    lookupFields.put("as", "companydoc");   
    DBObject lookup = new BasicDBObject("$lookup", lookupFields);  
    
    // build the $project operations  
    DBObject projectFields = new BasicDBObject("name", 1);  
    projectFields.put("lastName", 1);  
    projectFields.put("companyId", 1);  
    projectFields.put("companyName", "$c_2.companyName");         
    DBObject project = new BasicDBObject("$project", projectFields);  
    List<DBObject> pipeline = Arrays.asList(lookup, project);  
    AggregationOutput output = c_1.aggregate(pipeline);  
    for (DBObject result : output.results())    
    {  
        System.out.println(result);  
    }   
    

    错误: 响应消息:javax.script.scriptException:groovy.lang.MissingPropertyException:no such属性:查找类:script79

    1 回复  |  直到 6 年前
        1
  •  1
  •   Dmitri T    6 年前

    您的语法与不兼容 Groovy GStrings ,按 documentation 以下内容:

    如果您需要转义gstring中的$或$占位符,使它们看起来没有插值,则只需使用\反斜杠字符转义美元符号:

    assert '${name}' == "\${name}"
    

    所以要么使用单引号,比如:

    DBObject lookup = new BasicDBObject('$lookup', lookupFields);  
    

    或者用反斜杠避开美元符号:

    DBObject lookup = new BasicDBObject("\$lookup", lookupFields);  
    

    同样的方法 $project , $c_2.companyName 等。

    更多信息: How to Load Test MongoDB with JMeter