Java mongodb (morphia) 确保文档唯一

Java mongodb (morphia) ensure unique document

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

我不确定确保不会在数据库中出现两次相同文件的最佳方法。目前我正在获取文件的绝对路径,并根据数据库中的其他绝对路径检查它

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

如果此 returns 为空,则继续并保存。

像这样根据数据库检查每个文件是最好的方法吗?我试过使用以下索引注释,但它似乎不起作用,我最终得到了重复项

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

这是否比我以前检查重复项的方法更快(假设我可以让它工作)?

您也可以在您的集合中存储文件路径,并在文件路径上有一个唯一索引。当你想在你的集合中添加一个新文件时,你可以在文件路径上做一个更新插入。

您的索引无效,因为 fileNameabsolutePath 都存在唯一性约束。您将需要对 absolutePath 单独索引的唯一约束。

要在 Morphia 中执行更新插入,您需要将 UpdateOptions 实例传递给 datastore.update(),如 here 所述。 UpdateOptions 有一个 upsert(boolean),您只需将 true 传递给它。