【问题标题】:Log Bson query in javascript form [duplicate]以javascript形式记录Bson查询[重复]
【发布时间】:2018-02-08 08:23:32
【问题描述】:

我使用 Java 创建了一个复杂的 MongoDB 查询,在执行之前我通常会记录查询:

log.info("Filter: {}", queryFilter);

日志很有用,但打印的queryFilter是这种形式:

And Filter{filters=[Filter{fieldName='FinInstrmGnlAttrbts.ClssfctnTp', value=RFBTCB}, [...] ]}

我想以“Javascript 形式”的方式记录查询,就像它应该直接在 MongoDB 中执行一样,例如:

{$and : [ {'FinInstrmGnlAttrbts.ClssfctnTp' : 'RFBTCB'}, [...] ]}

这样,如果有一天会发生错误,我可以直接从日志中获取查询并在 MongoDB 中进行测试,而无需手动重新输入整个查询。

有没有可能?

【问题讨论】:

  • 我没用过它,但看了一下 API 文档(版本 3.5,最新)并猜测 queryFilter 的类型是 BasicDBObject 我看到有一个 toJson 方法.现在你得到了toString 方法的结果。如果您改为登录 queryFilter.toJson() 会发生什么?
  • queryFilter 是一个 org.bson.conversions.Bson 对象,它没有 toJson 方法。
  • 你确定吗?这不是具体类型,而是接口。尝试在其上调用 getClass() 以找出它的真正含义,然后将其转换为具体类型。
  • 我无法转换它,因为我的 queryFiltercom.mongodb.client.model.Filters.AndFilter 并且这个类是私有的。而且以更一般的方式,我无法投射它,因为我不知道queryFilter 是如何组成的(它可能是AndFilterOrFilter 或...)
  • 啊,明白了。很高兴您找到了解决方案。

标签: javascript java mongodb


【解决方案1】:

我已经解决了

BsonDocument bsonDocument = queryFilter.toBsonDocument(BsonDocument.class, MongoClient.getDefaultCodecRegistry());
log.info("Filter: {}", bsonDocument);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多