Spark 从 MongoDB 读取并按 objectId 索引字段过滤

Spark read from MongoDB and filter by objectId indexed field

我正在尝试使用 mongo-spark-connector 2.2.0 和 _id 字段上的过滤器从 MongoDB 读取数据集。

例如:

MongoSpark.loadAndInferSchema(session,ReadConfig.create(session)).filter(col("_id").getItem("oid").equalTo("590755cd7b868345d6da1f40"));

此查询在大集合上需要很长时间。看起来这个查询没有使用我在集合上的默认 _id 索引,因为过滤器使用字符串而不是 objectId。我怎样才能让它使用索引?

Mongo 默认情况下,连接器应将谓词推送到 mongo,以便我们可以使用 _id 字段,但如果这不起作用,我们可以使用管道 api 来实现相同,见下面的例子

val rdd = MongoSpark.load(sc)

val filterRdd = rdd.withPipeline(Seq(Document.parse(" { $match : { _id : "SomeValue" } }")))