gpt4 book ai didi

java - Spring Data Mongo MapReduce javascript 没有被转义

转载 作者:行者123 更新时间:2023-12-02 05:59:52 26 4
gpt4 key购买 nike

我正在尝试按照文档使用 Spring Data Mongo 运行 mapReduce

http://docs.spring.io/spring-data/data-mongodb/docs/1.0.0.M5/reference/html/

我在加载 javascript 文件时遇到了问题。当我包含我的map.js和reduce.js文件时,换行符就在那里,例如\n\r\t等。我使用了这个在线工具http://jscompress.com/将文件压缩为一行。然后加载文件,但出现错误:

org.springframework.dao.InvalidDataAccessApiUsageException:命令执行失败:错误[ns不存在],

引起:com.mongodb.CommandFailureException: { "serverUsed": "/127.0.0.1:27017", "ok": 0.0 , "errmsg": "ns 不存在"} 在 com.mongodb.CommandResult.getException(CommandResult.java:71) 在 com.mongodb.CommandResult.throwOnError(CommandResult.java:110) 在 org.springframework.data.mongodb.core.MongoTemplate.handleCommandError(MongoTemplate.java:1814) ... 32 更多

我尝试将文件作为字符串加载并转义 JavaScript。使用 mongo 驱动程序,即相同的 JavaScript 可以很好地工作。

MongoClient mongoClient = new MongoClient("localhost", 27017);
DB db = mongoClient.getDB("product_data");
DBCollection catalogData = db.getCollection("catalogData");
MapReduceCommand cmd = new MapReduceCommand(catalogData, stringMap, stringReduce, "map_reduce_java_test", MapReduceCommand.OutputType.REPLACE, null);
catalogData.mapReduce(cmd);

这不起作用:

mongoOperations.mapReduce("catalogData", stringMap, stringReduce, new MapReduceOptions().outputCollection("map_reduce_java_test")
.finalizeFunction(stringFinalize).outputTypeReplace(),
CatalogItem.class);

感谢任何帮助或想法。

最佳答案

我快速浏览了一下。不幸的是我无法重现你的问题。您使用的是哪个版本的 Spring Data MongoDB?您指的是 Spring Data MongoDB 的一个相当旧的版本,当前版本是 1.4.1: http://docs.spring.io/spring-data/data-mongo/docs/1.4.1.RELEASE/reference/html/mongo.core.html#mongo.mapreduce

纯 MongoDriver 和 Spring Data MongoDb 的 M/R 代码似乎不匹配,例如您没有使用finalizeFunction。您介意编写一个重现该问题的测试用例吗?

您可以使用 MapReduceTests 来实现: https://github.com/spring-projects/spring-data-mongodb/blob/master/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapreduce/MapReduceTests.java#L58

这是我尝试过的:

@Test
public void shoudSupportRunningCompressedJavaScriptAsMapReduceCommands() {

createMapReduceData();

MapReduceResults<ValueObject> results = mongoTemplate.mapReduce(
"jmr1",
mapFunction,
reduceFunction,
new MapReduceOptions().outputCollection("map_reduce_java_test").outputTypeReplace()
.finalizeFunction("function(key,reducedValue){return reducedValue}"), ValueObject.class);

assertThat(results, is(notNullValue()));

Map<String, Float> m = copyToMap(results);

assertEquals(1, m.get("a").intValue());
assertEquals(2, m.get("b").intValue());
assertEquals(2, m.get("c").intValue());
assertEquals(1, m.get("d").intValue());
}

关于java - Spring Data Mongo MapReduce javascript 没有被转义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22761945/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com