【问题标题】:Manipulating the String操作字符串
【发布时间】:2016-10-14 11:44:08
【问题描述】:

我想操作字符串。 示例:

RegistrationRequest.find({ 'serviceRequest.serviceRequestSubtype.masterCode': 'RETPOSTREG',  $and: [ { 'serviceRequest.serviceRequestStatus.masterCode': 'COMPLETED' },  { $and: [ { 'serviceRequest.customer.services.service.0.serviceDetails.serviceStatus.masterCode': 'ACT' },  { $and: [ { 'serviceRequest.customer.services.service.0.serviceDetails.technology.masterCode': 'GSM' } ] } ] } ] },  {'serviceRequest.customer.profileDetails.basicDetails.customerCode': 1,_id:0}).sort({"serviceRequest.modifiedDate": 1})

我想把上面的分成3个字符串

如下:

 query = { 'serviceRequest.serviceRequestSubtype.masterCode': 'RETPOSTREG',  $and: [ { 'serviceRequest.serviceRequestStatus.masterCode': 'COMPLETED' },  { $and: [ { 'serviceRequest.customer.services.service.0.serviceDetails.serviceStatus.masterCode': 'ACT' },  { $and: [ { 'serviceRequest.customer.services.service.0.serviceDetails.technology.masterCode': 'GSM' } ] } ] } ] }

projection = {'serviceRequest.customer.profileDetails.basicDetails.customerCode': 1,_id:0}

sort = {"serviceRequest.modifiedDate": 1}

我可以按如下方式分开排序 - 排序可能并不总是存在。

if(query.contains("sort"))
        {
            String sortParams = query.substring(query.lastIndexOf(".")+1, query.lastIndexOf(")")-1);
        }

得到其他值

String parseQuery = query.substring(query.indexOf("(")+1, query.lastIndexOf(".")-2);

现在 parseQuery 有了字符串:

 { 'serviceRequest.serviceRequestSubtype.masterCode': 'RETPOSTREG',  $and: [ { 'serviceRequest.serviceRequestStatus.masterCode': 'COMPLETED' },  { $and: [ { 'serviceRequest.customer.services.service.0.serviceDetails.serviceStatus.masterCode': 'ACT' },  { $and: [ { 'serviceRequest.customer.services.service.0.serviceDetails.technology.masterCode': 'GSM' } ] } ] } ] },  {'serviceRequest.customer.profileDetails.basicDetails.customerCode': 1,_id:0}

现在我需要将上面的内容分隔为两个字符串,最后一个 {} 之间的字符串是 mongodb 中的投影,我想要作为单独的字符串说投影。

谁能帮我解决这个问题。

谢谢 萨拉达

【问题讨论】:

  • 添加语言标签将增加您获得有用答案的机会。这是java吗?
  • 是的,它是java。我想运行mongo查询,在运行之前我需要将字符串作为查询参数分离到一个字符串,将参数返回到一个字符串并将参数排序到另一个字符串。

标签: java string mongodb mongodb-query


【解决方案1】:

我能够操纵字符串。 下面是代码:

String sortParams="";
String findParams = "";
String returnParams="";
//if sort is there then this keyword will be there
String sortStr = "sort";
//if return params exist then only the below substring will be there
String retStr="]},{";

//remove extra spaces in the query
        query = query.replaceAll(" ", "");

        if(query.contains(sortStr))
        {

             sortParams = query.substring(query.lastIndexOf(sortStr)+5, query.lastIndexOf(")"));

             query = query.substring(0, query.lastIndexOf(sortStr)-1);
        }

        if(query.contains(retStr))
        {
            returnParams =   query.substring(query.lastIndexOf(retStr)+3, query.length()-1);

            query = query.substring(0, query.lastIndexOf(retStr)+2)+")";
        }

         findParams = query.substring(query.indexOf("(")+1, query.length()-1);

例如:- 实际查询:

RegistrationRequest.find({ 'serviceRequest.serviceRequestSubtype.masterCode': 'RETPOSTREG',  $and: [ { 'serviceRequest.serviceRequestStatus.masterCode': 'COMPLETED' },  { $and: [ { 'serviceRequest.customer.services.service.0.serviceDetails.serviceStatus.masterCode': 'ACT' },  { $and: [ { 'serviceRequest.customer.services.service.0.serviceDetails.technology.masterCode': 'GSM' } ] } ] } ] },  {'serviceRequest.customer.profileDetails.basicDetails.customerCode': 1,_id:0}).sort({serviceRequest.modifiedDate})

if(query.contains(sortStr)) 语句执行后

sortparams : {'serviceRequest.modifiedDate':1}
Query after sort params removed :RegistrationRequest.find({'serviceRequest.serviceRequestSubtype.masterCode':'RETPOSTREG',$and:[{'serviceRequest.serviceRequestStatus.masterCode':'COMPLETED'},{$and:[{'serviceRequest.customer.services.service.0.serviceDetails.serviceStatus.masterCode':'ACT'},{$and:[{'serviceRequest.customer.services.service.0.serviceDetails.technology.masterCode':'GSM'}]}]}]},{'serviceRequest.customer.profileDetails.basicDetails.customerCode':1,_id:0})

在执行 if(query.contains(retStr)) 之后

returnParams :{'serviceRequest.customer.profileDetails.basicDetails.customerCode':1,_id:0}
Query after return params removed :RegistrationRequest.find({'serviceRequest.serviceRequestSubtype.masterCode':'RETPOSTREG',$and:[{'serviceRequest.serviceRequestStatus.masterCode':'COMPLETED'},{$and:[{'serviceRequest.customer.services.service.0.serviceDetails.serviceStatus.masterCode':'ACT'},{$and:[{'serviceRequest.customer.services.service.0.serviceDetails.technology.masterCode':'GSM'}]}]}]})

执行最后一条语句后

findParams :{'serviceRequest.serviceRequestSubtype.masterCode':'RETPOSTREG',$and:[{'serviceRequest.serviceRequestStatus.masterCode':'COMPLETED'},{$and:[{'serviceRequest.customer.services.service.0.serviceDetails.serviceStatus.masterCode':'ACT'},{$and:[{'serviceRequest.customer.services.service.0.serviceDetails.technology.masterCode':'GSM'}]}]}]}

谢谢 萨拉达

【讨论】:

  • 这段代码容易出错,很难推理
猜你喜欢
  • 2011-05-12
  • 1970-01-01
  • 2013-09-06
  • 2012-06-13
  • 2019-08-28
  • 2016-03-17
相关资源
最近更新 更多