powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / И снова про Mongo - как работать через драйвер С# через текстовые строки типа консоли?
4 сообщений из 4, страница 1 из 1
И снова про Mongo - как работать через драйвер С# через текстовые строки типа консоли?
    #39245223
kamakama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток. Есть задача - программа на С# должна получать на вход извне запросы в виде текста наподобие консольных запросов Mongo, выполнять их и дальше что-то там делать. Структура запросов заранее не известна, поэтому использование объектной модели из примеров не применимо, по крайней мере в чистом виде. Как это сделать? Нашел пример, но он старый http://stackoverflow.com/questions/6120629/can-i-do-a-text-query-with-the-mongodb-c-sharp-driver и с современным драйвером даже не компилируется. Из примера получился такой код:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
MongoServerSettings mss = new MongoServerSettings();
mss.ConnectionMode = ConnectionMode.Automatic;
mss.Server = new MongoServerAddress("localhost", 27020);
MongoServer ms = new MongoServer(mss);
var collection = ms.GetDatabase("local").GetCollection("title");
var items = collection.GetItems<BsonDocument>("{ val : 'А'}", "{val:1}");

    public static class MongoDbExt
    {
        public static List<T> GetItems<T>(this MongoCollection collection,
                string queryString, string orderString) where T : class
        {
            MongoCursor<T> cursor;
            SortByWrapper order = null;
            QueryDocument query = null;
            if ((queryString != "") && (queryString != null))
            {
                var queryDoc = BsonSerializer.Deserialize<BsonDocument>(queryString);
                query = new QueryDocument(queryDoc);
            }
            cursor = collection.FindAs<T>(query);
            //cursor = collection.FindAs<T>(null);
            if ((orderString != "") && (orderString != null))
            {
                var orderDoc = BsonSerializer.Deserialize<BsonDocument>(orderString);
                order = new SortByWrapper(orderDoc);
            }
            cursor.SetSortOrder(order);
            return cursor.ToList();
        }
    }



Компилируется, выполняется, доходит до return cursor.ToList(); и висит, через 30 секунд отваливается по таймауту. В коллекции 33 документа, из консоли все работает. Что я делаю не так? Версия драйвера MongoDB.Driver.dll 2.2.3.3

Отвлеченно - почему MongoCollection и IMongoCollection вообще никак не связаны друг с другом? Хотя оба используются для работы с коллекциями, но один имеет метод FindAs, а другой - нет?
...
Рейтинг: 0 / 0
И снова про Mongo - как работать через драйвер С# через текстовые строки типа консоли?
    #39245859
kamakama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно, переформулирую вопрос - как еще можно работать из .net, кроме как через объектную модель драйвера?
1) Подключать родные библиотеки на с++ и их импортировать. Самый муторный вариант получить 5 метров колючей проволоки из ежа и ужа
2) Продолжать ковыряться в драйвере или, как вариант, найти драйвер, под которым собран пример и поста выше. Возможно, свежий драйвер забагован именно в этом месте
3) Другие варианты?
...
Рейтинг: 0 / 0
И снова про Mongo - как работать через драйвер С# через текстовые строки типа консоли?
    #39246205
kamakama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Итак, тот самый другой вариант. Как уже ранее подтверждалось практикой самое свежее не значит самое лучшее. Ставим MongoDB 3.0 и в паре с драйвером 1.10 работает такой код:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
var server = MongoServer.Create("mongodb://localhost:27017");
var collection = server.GetDatabase("local").GetCollection("test");
var items = collection.GetItems<BsonDocument>("{ val : 'А'}", "{val:1}");

    public static class MongoDbExt
    {
        public static List<T> GetItems<T>(this MongoCollection collection,
                string queryString, string orderString) where T : class
        {
            MongoCursor<T> cursor;
            SortByWrapper order = null;
            QueryDocument query = null;
            if ((queryString != "") && (queryString != null))
            {
                var queryDoc = BsonSerializer.Deserialize<BsonDocument>(queryString);
                query = new QueryDocument(queryDoc);
            }
            cursor = collection.FindAs<T>(query);
            //cursor = collection.FindAs<T>(null);
            if ((orderString != "") && (orderString != null))
            {
                var orderDoc = BsonSerializer.Deserialize<BsonDocument>(orderString);
                order = new SortByWrapper(orderDoc);
            }
            cursor.SetSortOrder(order);
            return cursor.ToList();
        }
    }
...
Рейтинг: 0 / 0
И снова про Mongo - как работать через драйвер С# через текстовые строки типа консоли?
    #39246238
kamakama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Особенность - компилируется с FW 3.5 со всеми плюсами и минусами этого факта - есть поддержка на XP, но нет async/await
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / И снова про Mongo - как работать через драйвер С# через текстовые строки типа консоли?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]