Java mongodb(morphia)确保独特的文档

时间:2017-01-07 08:16:33

标签: java mongodb morphia

我有一个任务,每隔 n 秒运行扫描文件系统以获取新文件并将它们存储到集合中。

我不确定确保在数据库中两次不使用同一文件的最佳方法。目前我正在获取文件绝对路径并检查数据库中的其他绝对路径

public Movie findByAbsolutePath(String absolutePath) {
    return getDatastore().find(Movie.class, "absolutePath", absolutePath).limit(1).get();
}

如果返回null,则继续并保存。

是否正在针对数据库检查每个文件,这是最好的方法吗?我已经尝试使用以下索引注释,但它似乎不起作用,我最终得到重复

@Indexes(@Index(fields = {@Field("fileName"), @Field("absolutePath")}, options = @IndexOptions(unique = true, dropDups = true)))

这比我检查重复的方式更快(假设我可以让它工作)吗?

2 个答案:

答案 0 :(得分:1)

您的索引不起作用,因为fileNameabsolutePath上的唯一性约束。您将仅在absolutePath上的单独索引上需要唯一约束。

要在Morphia中进行upsert,您需要将UpdateOptions个实例传递给datastore.update(),如文档here所示。 UpdateOptionsupsert(boolean),您只需将true传递给ob_start

答案 1 :(得分:0)

您也可以在集合中存储文件路径,并在文件路径上具有唯一索引。如果要在集合中添加新文件,可以在文件路径上执行upsert。