gpt4 book ai didi

mongodb - 循环 Java 对象并将一个字段传递给 Mongo 查询,类似于 SQL WHERE...IN 子句

转载 作者:行者123 更新时间:2023-12-01 18:51:17 26 4
gpt4 key购买 nike

我正在尝试通过迭代 Java 对象列表并使用该列表中的一个字段来填充 IN 数据来构建与 SQL WHERE IN 子句等效的 MongoDB。使用通用示例,我想用 MongoDB 语法构建以下命令:

SELECT title FROM albums WHERE recorded_year IN ('1967','1968','1969','1970');

使用以下循环从Album 对象recordedYear 值中提取SQL 命令IN 数据:

if (albums.size() <= 1000) {
sb.append("SELECT title FROM albums WHERE recorded_year");
sb.append(" IN (");
for (int i = 0; i < albums.size(); i++) {
sb.append("'");
sb.append(albums.get(i).getRecordedYear());
sb.append("'");
if (i < albums.size() - 1) {
sb.append(",");
} else {
sb.append(")");
}
}
}

我访问的大多数 Mongo/Java 站点似乎都使用硬编码值来处理命令结构,这虽然很有用,但在现实世界的应用程序中完全不切实际。任何帮助指出一个好的教程,或者如果有人拥有实际的代码本身将不胜感激。

谢谢。

最佳答案

But the issue I am having is understanding how to pass a Java Object list to the to the getAllDocuments...

使用 in 运算符创建一个要与字段匹配的元素数组。例如,如果您有一个 someObject.year 字段,则该数组将包含年份值; int [] matchYears = { 1989, 2001, 2012 }。除了数组之外,您还可以使用 List 集合。

查询:

Bson queryFilter = in("recordedYear", matchYears);
List<Document> result = new ArrayList<>();
collection.find(queryFilter).into(result);
result.forEach(System.out::println);

queryFilter 是使用 com.mongodb.client.model.Filters 构建的工厂类。

有关使用 $in operator 的 MongoDB 文档.

注意:int [] matchYears = { 1989, 2001, 2012 } 也可以创建为int [] matchYears = { javaObject1.recorded_year, javaObject2.recorded_year, ... }

关于mongodb - 循环 Java 对象并将一个字段传递给 Mongo 查询,类似于 SQL WHERE...IN 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59734362/

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