我有一个关于MongoDB Java驱动程序的非常具体的问题。详细地说,我的应用程序中有一个$and
过滤器。如果与$and
关联的过滤器数组为空,则会出现以下错误:
错误查询:BadValue:$和/ $或/ $也不一定是非空数组
要解决此问题,我想热切地检查$and
过滤器是否为空。我手里拿着BSon
个物体。我可以使用以下代码在BSonDocument
中对其进行转换。
filter.toBsonDocument(BsonDocument.class, MongoClient.getDefaultCodecRegistry())
问题是我找不到标准方法来检查文档正文是否为空。方法isEmpty()
会返回false
,因为存在$and
过滤器。然后,我尝试使用这种方法:
filter.toBsonDocument(BsonDocument.class, MongoClient.getDefaultCodecRegistry())
.entrySet()
.stream()
.filter(entry -> {
final BsonValue value = entry.getValue();
if (value.isArray())
return value.asArray().size() == 0;
return false;
})
.count() != 0;
上面的代码听起来像代码味道。有没有一种标准的方法来完成这项任务?我使用的Mongo版本是3.3。
提前致谢。
答案 0 :(得分:0)
你可以尝试这样的事情。
BsonDocument andFilterDoc = filter.toBsonDocument(BsonDocument.class, MongoClient.getDefaultCodecRegistry())
用于检查$and
过滤器doc是否为空。
andFilterDoc.get("$and").asArray().isEmpty()