Проект для работы с LiteDB. Удобная NoSQL база для парсинга.

RoyalBank

Client
Регистрация
07.09.2015
Сообщения
557
Благодарностей
550
Баллы
93

seodamage

Client
Регистрация
08.09.2014
Сообщения
224
Благодарностей
67
Баллы
28
Привет

поделитесь пожалуйста снипетом которым можно делать обращение к базе и доставать оттуда данные / удалять и изменять
 
  • Спасибо
Реакции: RazDvaTri

baracuda

Client
Регистрация
19.06.2013
Сообщения
793
Благодарностей
278
Баллы
63
Эта тема хороша,но не раскрыта инструкция. По условию конкурса,надо чтобы было подробно описано как пользоваться.
У тебя краткая инструкция, это значит тема не для новичков или для тех кто хочет познать базы данных. Скорее для тех кто уже в БД работает долгое время и понятна суть работы.

В кубике-код,только шаблоны-примеры заполнения. Но никаких переменных нет,получается не понять будет как парсить любой сайт.

На скриншотах ты раскрыл как парсил в БД "звездные войны" по всем переменным. Неплохо было бы и шаблон прислать как спарсил сайт.
Соглашусь. Пример того же ЯМ или другово ресурса будь то ИМ или каталог фильмов был бы отличным примеров.
 

RoyalBank

Client
Регистрация
07.09.2015
Сообщения
557
Благодарностей
550
Баллы
93
Пример того же ЯМ или другово ресурса будь то ИМ или каталог фильмов был бы отличным примеров.
В этом сообщении уже приводил пример с переменными проекта.
Все что необходимо сделать это создать правильный BsonDocument, который будет отправляться в базу данных.
 

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Благодарностей
404
Баллы
63
Тут эта, возжелалось мне сразу JSON из строки в БД пихать, чтобы одним запросом — пришлось поковыряться в методах. Собственно различие только в создании BSON документа, все остальное RoyalBank уже описал. Тем не менее, выложу здесь сниппет, глядишь еще кому сгодится:
C#:
//если из переменной проекта
string json = project.Variables["json"].Value;
//или прямо из строки
//string json = @"{"title": "value"}";

// Объявляем объект для lock'a
object NoSQL = new object();

//именно в создании документа отличие от методов описанных ТС
BsonDocument bd = LiteDB.JsonSerializer.Deserialize(json).AsDocument;

//дальше все как описал RoyalBank
if (true)
{
    lock(NoSQL)
    {
        using(var db = new LiteDatabase(Path.Combine(project.Directory, @"dbname.db")))
        {
            var col = db.GetCollection(DateTime.Now.Date.ToString("dd_MM_yyyy"));
            col.Insert(bd);
        }
    }
}
 
  • Спасибо
Реакции: baracuda

Fedor5588

Client
Регистрация
04.06.2017
Сообщения
313
Благодарностей
73
Баллы
28
Привет

поделитесь пожалуйста снипетом которым можно делать обращение к базе и доставать оттуда данные / удалять и изменять
Поддержу вопрос, раньше не работал с БД но этот вариант идеально для меня подходит, дайти плиз примеры данных сниппетов
 
  • Спасибо
Реакции: seodamage

Fedor5588

Client
Регистрация
04.06.2017
Сообщения
313
Благодарностей
73
Баллы
28
У меня получилось настроить чтобы парсилось в базу, а как теперь получить оттуда строку или обновить строку или удалить
 

seodamage

Client
Регистрация
08.09.2014
Сообщения
224
Благодарностей
67
Баллы
28

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Благодарностей
404
Баллы
63
У меня получилось настроить чтобы парсилось в базу, а как теперь получить оттуда строку или обновить строку или удалить
У меня не было необходимости в изменении данных в БД, поэтому в этом не подскажу. Один из вариантов, как получить из БД инфу показывал RoyalBank в шаблоне, в кубике «Перебор и взятие значений из базы». От себя добавлю еще пару вариантов.

1 вариант — когда из БД нужно получить строку, соответствующую определенному значению определенного поля:
C#:
object NoSQL = new object();
string dbname = "dbname.db";                                 //имя бд
string connect = project.Directory + dbname;                 //путь к бд

lock(NoSQL)
{
    using(var db = new LiteDatabase(connect))
    {
        List<string> cols = new List<string>(db.GetCollectionNames());            //получили в список все коллекции в бд
    
        string colname = cols.ElementAt(1);                                        //взяли из списка коллекций нужную строку 1
        var col = db.GetCollection(colname);                                    //получили коллекцию с именем colname
        var el = col.FindOne(Query.EQ("ИмяСтолбца", "ЗначениеПоКоторомуНужноВзятьСтроку"));    //Получили из коллекции BSON документ (строку)
    
        //Получаем только значение нужного поля
        string cellvalue = el["FieldName"].AsString;                           //Здесь можно выбрать, в каком виде вернуть данные т.е. string, int etc
    
        //Получаем в json всю строку и разбираем ее средствами ZP
        string str = LiteDB.JsonSerializer.Serialize(el, true, true);            //Перегнали его в JSON   
        project.Json.FromString(str);                                            //Раcпарсили JSON
        
    }
}
2 Вариант, как разновидность предложенного ТС перебора документов в коллекции:
C#:
object NoSQL = new object();
string dbname = "dbname.db";                                 //имя бд
string connect = project.Directory + dbname;                 //путь


lock(NoSQL)
{
    using(var db = new LiteDatabase(connect))
    {
        List<string> cols = new List<string>(db.GetCollectionNames());            //получили в список все коллекции в бд
        
        string colname = cols.ElementAt(1);                                        //взяли из списка коллекций строку 1
        var col = db.GetCollection(colname);                                    //получили коллекцию с именем colname
        
        IEnumerable<BsonDocument> items = col.FindAll().ToList();
        
        /*
        //Вариант1
        int c = items.Count();
        
        for(int i=0; i<c; i++)
        {
            //берем строку из БД
            BsonDocument item = items.ElementAt(i);
            //получаем в строковые переменные значения строки БД
            string cell1value = item["Field1Name"].AsString;
            string cell2value = item["Field2Name"].AsString;
            string cell3value = item["Field3Name"].AsString;
                
        }
        */
        
        //Вариант 2
        foreach(var item in items)
        {
            string cell1value = item["Field1Name"].AsString;            //В строку
            string cell2value = item["Field2Name"].AsString;            //В строку
            project.Variable["varname"] = item["Field3Name"].AsString;    //В переменную проекта
                
        }
        
        
    }
}
P.S. RoyalBank если покажешь пример как мапить BsonDocument в свой объект, буду очень признателен — сам понять не смог.
 

RoyalBank

Client
Регистрация
07.09.2015
Сообщения
557
Благодарностей
550
Баллы
93
  • Спасибо
Реакции: semafor

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Благодарностей
404
Баллы
63
Я не пользуюсь базой для получения данных, только хранение. Работать с базой можно через классы из общего кода.
Тут по ссылке пример класса: https://github.com/mbdavid/LiteDB/wiki/Object-Mapping
Да смотрел я там, и так и эдак крутил-вертел — класс создать не проблема, а вот смапить в него Bson... Не выходит каменный цветок и все тут... Вообще конечно не хватает либе подробных доков с примерами.
 
  • Спасибо
Реакции: RoyalBank

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)