Mongodb Jongo MongoCollection.insert(字符串查询)正在将#作为参数进行分析。如何避免

Mongodb Jongo MongoCollection.insert(字符串查询)正在将#作为参数进行分析。如何避免,mongodb,insert,token,param,jongo,Mongodb,Insert,Token,Param,Jongo,我正在调用jongo的mongoCollection.insert(字符串查询)方法,以便在集合中插入JSON。JSON在字段值中包含一个#字符。 但由于#用作查询参数令牌指示符,我最终将得到一个带有“传递给查询的参数不够”消息的解析错误 如何保存包含#字符的动态JSON字符串(注意,我不知道JSON的结构或模式) 例如: { “订单id”:“123445”, “订单名称”:“测试值1” } “test val#1”只是用户输入的字符串值。我不想对每个字段值进行编码,在我的情况下甚至不可能。请

我正在调用jongo的mongoCollection.insert(字符串查询)方法,以便在集合中插入JSON。JSON在字段值中包含一个#字符。 但由于#用作查询参数令牌指示符,我最终将得到一个带有“传递给查询的参数不够”消息的解析错误

如何保存包含#字符的动态JSON字符串(注意,我不知道JSON的结构或模式)

例如: { “订单id”:“123445”, “订单名称”:“测试值1” }

“test val#1”只是用户输入的字符串值。我不想对每个字段值进行编码,在我的情况下甚至不可能。请让我知道,如果有一个工作周围


谢谢

您可以通过实例化自定义BsonQueryFactory来配置Jongo使用的令牌。 不过,此令牌将用于应用程序中的所有查询

如果您只想更改单个查询的标记,可以将带“#”的字符串作为参数传递:

@Test
public void canFindAndInsertWithHash() throws Exception {

    collection.insert("{name:#}", "test val#1");

    Friend friend = collection.findOne("{name:#}", "test val#1").as(Friend.class);

    assertThat(friend).isNotNull();
    assertThat(friend.getName()).isEqualTo("test val#1");
}

我有相同的pb,我通过复制org.jongo.marshall.mapper.jacksonapper来解决它,但通过以下方式更改第60行:

queryFactory = new BsonQueryFactory(jacksonEngine, "#|#");
我的新花样在哪里

那么我会:

Mapper jm = new JacksonMapperCustom.Builder().build();
Jongo jongo = new Jongo(db, jm);

而且效果很好

谢谢你的回复。但是,由于Jongo中的一个bug或一个特性,这个参数将不起作用。它将用{$marshall:0}替换#,即使它在引号内(“”)。最终,我们将从mongo驱动程序获得com.mongodb.util.JSONParseException。更清楚地说,如果我尝试collection.insert(“{name:test val#1}”,“somestring”);我会得到一个例外。难道你不认为BSONQueRealFutialCytActRealy方法应该只考虑它是否代表整个属性名或属性值(如{No:Y}),而忽略值字符串的一部分(如{No:ValueValx 1 })@ DPL,你是否试图插入字符串“测试ValeString 1”?如果没有,我不明白为什么您要尝试执行
collection.insert(“{name:test val#1}”,“somestring”)如果要插入“test val#1”,为什么Benoit的代码不适合您?Paul,如果我不清楚,很抱歉。以上就是一个例子。我试图插入“test val#1”。但正如我在前面的问题中提到的,我从客户端获得了完整的JSON。我不解析它,而是直接将它插入Mongodb。我尝试了Benoit的答案:collection.insert(“{name:test val#1}”,“#”),但它不起作用,因为我们最终得到了发送给mongo驱动程序的JSON{name:test val{$marshall:0}1}。mongo驱动程序无法解析此JSON,并将抛出JSONParseExceptionHello我在参数中添加了一个带有哈希的测试:此测试是否代表您试图实现的目标?