gpt4 book ai didi

spring - 由于 com.mongodb.BasicDBObject 的限制在添加多个条件 GridFSDBFile 查询时异常

转载 作者:可可西里 更新时间:2023-11-01 10:02:13 24 4
gpt4 key购买 nike

我想在 GridFSDBFile 中添加多个条件,我已经迭代了 map 并形成了条件对象,但我得到了以下异常

Due to limitations of the com.mongodb.BasicDBObject, you can't add a second '$and' expression specified.

我的代码片段是

public void getFile(Map<String, Object> metaData) throws Exception {
Criteria criteria = new Criteria();
metaData.forEach((k, v) -> criteria.andOperator(Criteria.where("metadata." + k).is(v)));
GridFSDBFile gridFSDBFile = gridFsOperations.findOne(new Query(criteria));
if (gridFSDBFile == null) {
throw new HttpConflictException();
}

最佳答案

您可以将方法更新到下面。您正在尝试提供多个 $and 运算符,每个运算符都有一个条件。

顺便说一句,当条件用逗号分隔时,您不需要显式的 anding,因为 mongodb 提供隐式的 anding。

public void getFile(Map<String, Object> metaData) throws Exception {
Criteria criteria = new Criteria();
metaData.forEach((k, v) -> criteria.and("metadata." + k).is(v));
GridFSDBFile gridFSDBFile = gridFsOperations.findOne(new Query(criteria));
if (gridFSDBFile == null) {
throw new HttpConflictException();
}

如果你需要明确的ing,你可以使用下面的代码

public void getFile(Map<String, Object> metaData) throws Exception {
Criteria criteria = new Criteria();
Criteria[] andExpressions = metaData.entrySet().stream().
map(kv -> Criteria.where("data." + kv.getKey()).is(kv.getValue()))
.toArray(Criteria[]::new);
Query andQuery = new Query();
Criteria andCriteria = new Criteria();
andQuery.addCriteria(andCriteria.andOperator(andExpressions));
GridFSDBFile gridFSDBFile = gridFsOperations.findOne(andQuery);
if (gridFSDBFile == null) {
throw new HttpConflictException();
}

关于spring - 由于 com.mongodb.BasicDBObject 的限制在添加多个条件 GridFSDBFile 查询时异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47907333/

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