首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LiteDb -文件存储搜索

LiteDb -文件存储搜索
EN

Stack Overflow用户
提问于 2017-10-27 23:20:43
回答 2查看 1.6K关注 0票数 0

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

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

LiteDb文档给出了这个命令,用于搜索存储在数据库中特定“目录”中的所有文件;

代码语言:javascript
复制
 var files = db.FileStorage.Find("$/photos/2014/");

但是,我不知道如何处理files变量。我不能把它转换成可用的字符串等等。

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

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

EN

回答 2

Stack Overflow用户

发布于 2018-08-10 18:34:39

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

代码语言:javascript
复制
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
}

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

代码语言:javascript
复制
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

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

代码语言:javascript
复制
foreach(var searchResult in files)
{
    var fileInfo = $"Id: {searchResult.Id} | Filename: {searchResult.filename} | Length: {searchResult.length}";
    Console.WriteLine(fileInfo);
}

这将输出类似以下内容的内容:

代码语言:javascript
复制
Id: file1 | Filename: important.doc | Length: 73453
Id: file2 | Filename: less_important.doc | Length: 3476

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

代码语言:javascript
复制
new LiteDatabase("myDatabase.db")
    .GetCollection<_files>()
    .EnsureIndex(files => files.filename); //Create an index for filename
票数 3
EN

Stack Overflow用户

发布于 2017-10-28 05:13:26

我设法设计出了answer....shared,如果它对任何人都有用的话。

代码语言:javascript
复制
 listView1.Items.Clear();
        try
        {
    //"" is a blank search which will return all files. 
    //But could easily be a value from a textbox. It is loaded into the Array Files

            var files = db.FileStorage.Find("").ToArray();

    //go through each obj in the array and abstract FileName, ID and 
    //Created date, adding them each to a new array (mylist, mylist1 etc.)
foreach (object obj in files)
            {

                mylist = files.Select(I => Convert.ToString(I.Filename)).ToArray();
                mylist1 = files.Select(I => Convert.ToString(I.UploadDate)).ToArray();
                mylist2 = files.Select(I => Convert.ToString(I.Id)).ToArray();


            }

 //loop through the mylist arrays an create usable strings for each value.
            for (int i = 0; i < mylist.Length; i++)
            {
                name = mylist[i].ToString();
                datecreated = mylist1[i].ToString();
                id = mylist2[i].ToString();
 //add each value to a listview
                listView1.Items.Add(new ListViewItem(new string[] { name, datecreated,id }));

            }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46978445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档