LiteDb - 文件存储搜索

Adr*_*own 1 c# nosql litedb

我正在考虑使用 LiteDb for C# 作为文档存储系统。

只要我知道文件的 ID,我就可以上传和下载 - 但我也希望能够选择搜索它。

LiteDb 文档提供了此命令,用于搜索存储在 Db 内特定“目录”中的所有文件;

 var files = db.FileStorage.Find("$/photos/2014/");
Run Code Online (Sandbox Code Playgroud)

但是我不知道如何处理 files 变量。我无法将其转换为可用的字符串等。

例如,我想将其添加到列表视图中。

有人有使用 LiteDb 和文件搜索的经验吗?

小智 5

回答有点晚了,但可能仍然有用。搜索文件的更好方法是访问“_files”集合,它允许您搜索文件的元数据:

class _files
{
    public string Id { get; set; }
    public string filename { get; set; }
    public string mimeType { get; set; }
    public long length { get; set; }
    public int chunks{ get; set; }
    public DateTime uploadDate { get; set; }
    public object metadata { get; set; } //You could replace object with a custom class
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用“_files”类访问文件信息以进行搜索。在这种情况下,它将检索文件名中包含“somefile”的所有文件:

var files = new LiteDatabase("myDatabase.db")
    .GetCollection<_files>() //Accesses the _files collection where file info is stored
    .Find(file => file.Filename.Contains("somefile")); //Find files with "somefile" in the filename
Run Code Online (Sandbox Code Playgroud)

然后,您可以迭代结果来访问文件的信息:

foreach(var searchResult in files)
{
    var fileInfo = $"Id: {searchResult.Id} | Filename: {searchResult.filename} | Length: {searchResult.length}";
    Console.WriteLine(fileInfo);
}
Run Code Online (Sandbox Code Playgroud)

这将输出类似以下内容:

Id: file1 | Filename: important.doc | Length: 73453
Id: file2 | Filename: less_important.doc | Length: 3476
Run Code Online (Sandbox Code Playgroud)

另外,不要忘记为您经常搜索的属性创建索引。例如,在上面的示例中,我搜索了文件名。我可以为文件名属性创建一个索引,如下所示:

new LiteDatabase("myDatabase.db")
    .GetCollection<_files>()
    .EnsureIndex(files => files.filename); //Create an index for filename
Run Code Online (Sandbox Code Playgroud)