MongoDB Java In 查询指南
在 MongoDB Java 驱动程序中,执行 "in" 查询($in 操作符)有多种方式,以下是几种常见的实现方法:

使用基本查询构建器
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
// 获取集合
MongoCollection<Document> collection = database.getCollection("yourCollection");
// 创建 in 查询
List<String> values = Arrays.asList("value1", "value2", "value3");
Document query = new Document("fieldName", new Document("$in", values));
// 执行查询
FindIterable<Document> results = collection.find(query);
使用 Filters 类(推荐方式)
import static com.mongodb.client.model.Filters.in;
// 创建 in 查询
List<String> values = Arrays.asList("value1", "value2", "value3");
FindIterable<Document> results = collection.find(in("fieldName", values));
使用泛型方法(类型安全)
import static com.mongodb.client.model.Filters.in;
List<Integer> ids = Arrays.asList(1, 2, 3);
FindIterable<Document> results = collection.find(in("_id", ids));
处理不同数据类型的 in 查询
// 字符串 in 查询
collection.find(in("name", "Alice", "Bob", "Charlie"));
// 数字 in 查询
collection.find(in("age", 25, 30, 35));
// ObjectId in 查询
List<ObjectId> objectIds = Arrays.asList(new ObjectId(), new ObjectId());
collection.find(in("_id", objectIds));
完整示例
import com.mongodb.client.*;
import com.mongodb.client.model.Filters;
import org.bson.Document;
import org.bson.types.ObjectId;
import java.util.Arrays;
public class MongoInQueryExample {
public static void main(String[] args) {
// 连接到 MongoDB
MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017");
MongoDatabase database = mongoClient.getDatabase("testDB");
MongoCollection<Document> collection = database.getCollection("users");
// 准备查询值
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
List<Integer> ages = Arrays.asList(25, 30, 35);
List<ObjectId> ids = Arrays.asList(
new ObjectId("507f1f77bcf86cd799439011"),
new ObjectId("507f1f77bcf86cd799439012")
);
// 执行 in 查询
FindIterable<Document> nameResults = collection.find(Filters.in("name", names));
FindIterable<Document> ageResults = collection.find(Filters.in("age", ages));
FindIterable<Document> idResults = collection.find(Filters.in("_id", ids));
// 处理结果
System.out.println("Names matching:");
for (Document doc : nameResults) {
System.out.println(doc.toJson());
}
System.out.println("\nAges matching:");
for (Document doc : ageResults) {
System.out.println(doc.toJson());
}
System.out.println("\nIDs matching:");
for (Document doc : idResults) {
System.out.println(doc.toJson());
}
// 关闭连接
mongoClient.close();
}
}
注意事项
- 性能考虑:
$in操作符会使用索引,但如果查询的值列表很大,性能可能会下降。 - 查询限制:MongoDB 对
$in操作符中的值数量有限制(通常不超过 1000 个)。 - 类型安全:确保查询值与集合中字段的数据类型匹配。
- 空列表:如果传入空列表,查询将不会返回任何结果。
对于更复杂的查询,可以考虑组合多个条件,如:
// 组合多个条件
collection.find(
and(
in("category", "electronics", "books"),
gt("price", 100)
)
);
