gpt4 book ai didi

java - MongoDB 3.3.0以上版本中QueryBuilder和BasicDBObjectBuilder的使用

转载 作者:行者123 更新时间:2023-12-02 03:16:49 26 4
gpt4 key购买 nike

第 1 部分

跟进Querying Mongo Collection using QueryBuilder in Mongo 3.3.0的解决方案,我尝试实现建议的方法来实现collection.find()。但被不同的参数所困扰,已将 BasicDBObjectBuilder 传递给相同的内容,如下 -

BasicDBObjectBuilder queryBuilder = BasicDBObjectBuilder.start();

query.getParams().entrySet().stream().forEach(entry -> queryBuilder.add(entry.getKey(), entry.getValue()));


BasicDBObjectBuilder outputQuery = BasicDBObjectBuilder.start();
outputQuery.add(nameKey, 1);
<小时/>

这不能编译:

FindIterable<TDocType> tDocTypeList = collection.find(queryBuilder.get(), outputQuery.get());
<小时/>

这也不会编译:

FindIterable<TDocType> tDocTypeList = collection.find((Bson)queryBuilder.get(), (Bson)outputQuery.get()); 
<小时/>

这也不会编译:

org.bson.Document queryBuilder = new org.bson.Document();

query.getParams().entrySet().stream().forEach(entry -> queryBuilder.put(entry.getKey(), entry.getValue()));

org.bson.Document outputQuery = new org.bson.Document();
outputQuery.put(nameKey, 1);

FindIterable<TDocType> tDocTypeList = collection.find(queryBuilder, outputQuery);

Question - How do I specify a projection for the results required out of find() from collections?

<小时/>

第 2 部分

一方面,我可以简单地替换 mongo 3.0.4 java 驱动程序的代码 -

DBObject dbObject = collection.findOne(new QueryBuilder().put(ids).is(id).get())

Bson filter = Filters.eq(ids, id);
TDocType doc = collection.find(filter).first();

现在,如果我们有一个实现,通过迭代构建查询,如示例代码所示 -

for(Map.Entry<String, Object> entry : query.getParams().entrySet()) {
// this is where its building the query
if(some condition) {
queryBuilder.put(entry.getKey()).is(entry.getValue());
}
if(some other condition) {
queryBuilder.put(entry.getKey()).in(query.getValues());
}
}

Question - Is there a way to implement such appending query Filters with current mongo 3.3.0+ as well?

最佳答案

find 方法的第二个参数是结果类型。尝试如下。

FindIterable<TDocType> tDocTypeList = dbCollection.find(filter, TDocType.class);

投影更新

FindIterable<TDocType> tDocTypeList = dbCollection.find(filter, TDocType.class).projection(outputQuery);

附加过滤器的更新

List<Bson> filters = new ArrayList<>();
for (Map.Entry<String, Object> entry : query.getParams().entrySet()) {
// this is where its building the query
if (some condition){
filters.add(Filters.eq(entry.getKey(), entry.getValue()));
}
if (some other condition){
filters.add(Filters.in(entry.getKey(), query.getValues()));
}
}
FindIterable<TDocType> docType = dbCollection.find(Filters.and(filters));

关于java - MongoDB 3.3.0以上版本中QueryBuilder和BasicDBObjectBuilder的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40179940/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com