У меня есть сценарий, в котором я получал бы окончательный совокупный запрос в виде строки json. Я использую шаблон java spring mongo для обработки запроса.
mongoTemplate.executeCommand (запрос2);
где query2 - это строка массива с командой агрегирования, если я выполняю запрос в robomongo, он работает нормально, но когда я использовал команду execute, он не работает
query2 = db.exposedDocument.aggregate([{"$match":{"_id":"2520145607210090570"}},{"$lookup":{"localField":"details.asset.info.relatedAssetEntity.uId","as":"relatedAsset","foreignField":"_id","from":"exposedDocument"}},{"$project":{"assetDetails":"$details","assetId":"$_id","_id":0}},{"$project":{"assetDetails.activity":1,"assetDetails.asset.asset.details.circuitDetails.circuitId":1,"assetDetails.ticket":1,"assetDetails.asset.asset.details.accessInterconnect":1,"assetId":1,"assetDetails.asset.asset.details.serviceType":1,"assetDetails.asset.asset.details.accessSpeed":1,"assetDetails.asset.asset.details.deviceId":1,"assetDetails.alarm":1}}])
может ли команда execute обработать этот запрос?
Я буду получать как часть запроса, и мне нужно использовать как есть. этот запрос верен, как указано, но я не понимаю, как CommandResult result2 = mongoTemplate.executeCommand (query2); api docs, Open Declaration CommandResult org.springframework.data.mongodb.core.MongoTemplate.executeC ommand (String jsonCommand)
В "запросе" не могу включатьdb.exposedDocument.aggregate. Части «внутри» [] в виде строки - это нормально, но эта ведущая часть даже не JSON. Итак, вы были связаны с обоими ответами, которые объясняют обе эти вещи по какой-то причине.
Спасибо, Нил. Фактически, я фактически создал json-представление строки, как показано ниже List <JSONObject> json = (List <JSONObject>) parser.parse (querystring); Строка query2 = "db.exposedDocument.aggregate (" + json + ")"; CommandResult result2 = mongoTemplate.executeCommand (query2);




Это не JSON, а код оболочки mongodb / Robo3T. Хотя можно использовать JSON самого конвейера через синтаксический анализатор, вместо этого вам, вероятно, потребуется написать код на языке реализации. Аргументы
executeCommand()в любом случае не являются «строкой».