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)))
这是否比我以前检查重复项的方法更快(假设我可以让它工作)?
您也可以在您的集合中存储文件路径,并在文件路径上有一个唯一索引。当你想在你的集合中添加一个新文件时,你可以在文件路径上做一个更新插入。
您的索引无效,因为 fileName
和 absolutePath
都存在唯一性约束。您将需要对 absolutePath
单独索引的唯一约束。
要在 Morphia 中执行更新插入,您需要将 UpdateOptions
实例传递给 datastore.update()
,如 here 所述。 UpdateOptions
有一个 upsert(boolean)
,您只需将 true
传递给它。
我有一个任务每 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)))
这是否比我以前检查重复项的方法更快(假设我可以让它工作)?
您也可以在您的集合中存储文件路径,并在文件路径上有一个唯一索引。当你想在你的集合中添加一个新文件时,你可以在文件路径上做一个更新插入。
您的索引无效,因为 fileName
和 absolutePath
都存在唯一性约束。您将需要对 absolutePath
单独索引的唯一约束。
要在 Morphia 中执行更新插入,您需要将 UpdateOptions
实例传递给 datastore.update()
,如 here 所述。 UpdateOptions
有一个 upsert(boolean)
,您只需将 true
传递给它。