MongoDB Java驱动程序:检查$和过滤器是否为空

时间:2017-01-20 09:46:21

标签: java mongodb

我有一个关于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。

提前致谢。

1 个答案:

答案 0 :(得分:0)

你可以尝试这样的事情。

BsonDocument andFilterDoc = filter.toBsonDocument(BsonDocument.class, MongoClient.getDefaultCodecRegistry())

用于检查$and过滤器doc是否为空。

andFilterDoc.get("$and").asArray().isEmpty()