Передача примитивов через performSelectorOnMainThread

Есть ли способ отправить запрос, выраженный в синтаксисе запроса оболочки, к драйверу mongo C #

Например, что-то вроде

Coll.find { "myrecs","$query : { x : 3, y : "abc" }, $orderby : { x : 1 } } ");

Взять пример из руководства по оболочке

25
задан jack.the.ripper 27 September 2014 в 02:17
поделиться

2 ответа

Класс QueryComplete, похоже, устарел. Используйте вместо этого MongoDB.Driver.QueryDocument. Как показано ниже:

BsonDocument document = MongoDB.Bson.Serialization.BsonSerializer.Deserialize<BsonDocument>("{ name : value }");
QueryDocument queryDoc = new QueryDocument(document);
MongoCursor toReturn = collection.Find(queryDoc);
17
ответ дан 28 November 2019 в 18:23
поделиться

Вот несколько подпрограмм, которые я использую для преобразования из строки и объектов .NET в запросы BSON (это часть оболочки бизнес-объекта, поэтому пара ссылок на этот класс):

    public QueryDocument GetQueryFromString(string jsonQuery)
    {
        return new QueryDocument(BsonSerializer.Deserialize<BsonDocument>(jsonQuery));
    }

    public IEnumerable<T> QueryFromString<T>(string jsonQuery, string collectionName = null)
    {
        if (string.IsNullOrEmpty(collectionName))
            collectionName = this.CollectionName;

        var query = GetQueryFromString(jsonQuery);            
        var items = Database.GetCollection<T>(collectionName).Find(query);

        return items as IEnumerable<T>;
    }


    public IEnumerable<T> QueryFromObject<T>(object queryObject, string collectionName = null)
    {
        if (string.IsNullOrEmpty(collectionName))
            collectionName = this.CollectionName;

        var query = new QueryDocument(queryObject.ToBsonDocument());
        var items = Database.GetCollection<T>(collectionName).Find(query);

        return items as IEnumerable<T>;
    }

Использование это довольно просто сделать запрос через строку или парс объекта:

var questionBus = new busQuestion();           
var json = "{ QuestionText: /elimination/, GroupName: \"Elimination\" }";
var questions = questionBus.QueryFromString<Question>(json);

foreach(var question in questions) { ... }

или используя синтаксис объекта:

var questionBus = new busQuestion();            
var query = new {QuestionText = new BsonRegularExpression("/elimination/"), 
                 GroupName = "Elimination"};
var questions = questionBus.QueryFromObject<Question>(query);

foreach(var question in questions) { ... }

Мне нравится синтаксис объекта просто потому, что его немного легче записать в C # код, чем работа со встроенными кавычками в строках JSON, если они закодированы вручную.

4
ответ дан 28 November 2019 в 18:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: