所以我有一个queryObjects
的列表(我在我的程序中创建的一个类)来从一个mongo数据库中查询表达式都在像(伪代码)这样的对象中:
queryObject : { fild, operation, expression }
示例:queryObject : { field : "pagePath", operation:"$in", expression:"/home"}
用户可以根据需要创建任意数量的查询。这有点像魅力,直到我有两个具有相同字段名称的查询,例如:
queryObject1 : { field : "pagePath", operation:"$in", expression:"/home"}
queryObject2 : { field : "pagePath", operation:"$regex", expression:"(.html)$"}
比我有:query.put(queryObject1)和query.put(queryObject2) 这个命令:
FindIterable<Document> iterable = statistics.find(query).projection(excludeId());
仅考虑第二次放置,是什么让我觉得它可能会覆盖第一次。我该怎么做才能防止这种情况发生?在Mongo中是否有一个查询语法允许我测试页面路径是一个主页还是以.html结尾?知道这个条件可以改变我总是必须阅读查询对象并在我的程序中创建一个MongoQuery。
答案 0 :(得分:0)
假设您的查询对象基本上生成了可用于Collection.find()的Bson,您可以通过Filters-utilities组合多个Bsons:
Bson b1 = firstQuery.convertToDbQuery(); // or however you do it... ;-)
Bson b2 = secondQuery.convertToDbQuery();
Bson combinedAsAnd = Filters.and(b1, b2);
collection.find(combinedAsAnd).projection(...)