我正在尝试使用mongo-spark-connector 2.2.0在_id字段中使用过滤器从MongoDB读取数据集。
例如:
MongoSpark.loadAndInferSchema(session,ReadConfig.create(session)).filter(col("_id").getItem("oid").equalTo("590755cd7b868345d6da1f40"));
此查询在大集合上需要很长时间。看起来这个查询不使用我对集合的默认_id索引,因为过滤器使用字符串而不是objectId。如何让它使用索引?
答案 0 :(得分:0)
默认情况下,Mongo Connector应该将谓词推送到mongo,以便我们可以使用_id字段,但如果这不起作用,我们可以使用管道api来实现相同的效果,请参见下面的示例
val rdd = MongoSpark.load(sc)
val filterRdd = rdd.withPipeline(Seq(Document.parse(" { $match : { _id : "SomeValue" } }")))