Как перебрать LiteDB.LiteCollection для конкретных значений ключа из большого файла базы данных litedb - PullRequest
0 голосов
/ 10 февраля 2019

Я создаю автономную базу данных с использованием LiteDB с кодом C # для хранения метаданных каждого файла, таких как размер файла, абсолютный путь, время создания, расширение и т. Д. У меня возникли проблемы при запросе и повторении точного значения ключа из файла db, пожалуйста, помогитеСпасибо

Это мой запрос на вставку, который берет абсолютные пути для каждого файла из каталогов и передает путь в качестве переменной моему классу для установки значений метаданных файла и возврата объекта со значениями для хранения в LiteDB.

/ INSERT QUERY /

public void Поиск (/ * Пути дисков * /)

{

foreach (строковый файл вDirectory.GetFiles (путь, ". "))

{

try

{

с использованием (var db = newLiteDatabase (/ путь к моему файлу БД /))

{

var FileDBptr = db.GetCollection ("FileDB");

var data= новый FileInfoDB (файл);

FileDBptr.Insert (данные);

Console.WriteLine ("INCCERT УСПЕХА");

}

}

catch (Exception e)

{

Console.WriteLine ("COuld Not Create DB !!!!" + e);

}

} foreach (строка subDir в Directory.GetDirectories (path))

{

try

{

Поиск (subDir);

}

catch

{

throw;

}

}

}

/ * МОДЕЛЬ КЛАССА * /

[Сериализуемый]

public class FileInfoDB

{


    [BsonId]
    public ObjectId FileId { get; set; }
    public string FileName { get; set; }
    public string FilePath { get; set; }
    public string FileExtension { get; set; }
    public long FileSize { get; set; }
    public DateTime FileCreateTime { get; set; }
    public DateTime FileLastAccess { get; set; }
    public DateTime FileLastWrite { get; set; }

    public FileInfoDB(string path)
    {
        if (File.Exists(path))
        {
            try
            {
                FileInfo f = new FileInfo(path);
                FileId= ObjectId.NewObjectId();
                FileName = f.Name;
                FilePath = f.FullName;
                FileCreateTime = f.CreationTime;
                FileSize = f.Length;            //Size in bytes
                FileExtension = f.Extension;
                FileLastAccess = f.LastAccessTime;
                FileLastWrite = f.LastWriteTime;

            }
            catch (Exception)
            {

                throw;
            }
        }
    }
}

// КОД ЗАПРОСА ДЛЯ ПОЛУЧЕНИЯ

string fileName = "$ ICN03Z0.txt";

try {

            using (var db = new LiteDatabase(_jsonpath))
            {   
                var FileDBptr = db.GetCollection<FileInfoDB>("FileDB");
                FileDBptr.EnsureIndex(x=>x.FileName);
                var data2 = FileDBptr.Find(Query.EQ("FileName", fileName));              
                int c = FileDBptr.Count();
                Console.WriteLine(c);                //Correct output
                if (data2 !=null)
                { 
                   foreach (var a in data2)         //Throwing an Exception 
                   {
                       Console.WriteLine(a.FileName);
                   }
                }                                          
            }

}

Это данныеформат, который хранится в файле базы данных lite

{

"_ id": {"$ oid": "5c4ebee0f2e2d05814dcf865"},

"FileName": "$ ICN03Z0.txt ",

" FilePath ":" C: \ $ Recycle.Bin \ S-1-5-21-3439349906-2439027251-2956315770-1001 \ $ ICN03Z0.txt ",

"FileExtension": ". Txt",

"FileSize": {"$ numberLong": "114"},

"FileCreateTime": {"$ date": "2019-01-16T09: 04: 16.0810000Z "},

" FileLastAccess ": {" $ date ":" 2019-01-16T09: 04: 16.0810000Z "},

" FileLastWrite ":{"$ date": "2019-01-16T09: 04: 16.0810000Z"}

}

Я ожидаю найти значение в соответствии с filenaсначала я, а затем извлеките все остальные пары значений ключа из одного и того же файла.Я пытался с другим запросом, используя LINQ, как упоминалось в GitHub, но всегда выбрасывал исключение.Также проверили данные, хранящиеся в базе данных Lite, используя вставку оболочки LiteDB в указанном выше формате, но поиск вызывает проблемы.

Заранее спасибо!

...