Запросите тип (класс C#) из коллекции BsonDocument в MongoDb

Я использую одну коллекцию для хранения экземпляров моих классов C# в виде BsonDocument в MongoDB через Azure CosmoDB. Мне удалось выполнить вставки, но я не мог ни обновлять, ни находить (фильтровать) запросы по моим классам C#. Вот несколько кодов:

//class 1
public class Subscriber
    {
        [MongoDB.Bson.Serialization.Attributes.BsonId]
        [MongoDB.Bson.Serialization.Attributes.BsonRepresentation(MongoDB.Bson.BsonType.ObjectId)]
        public string Id { get; set; }
        public string Email { get; set; } = string.Empty;       
    }
//class 2
public class TokenDb
    {
        [MongoDB.Bson.Serialization.Attributes.BsonId]
        [MongoDB.Bson.Serialization.Attributes.BsonRepresentation(MongoDB.Bson.BsonType.ObjectId)]
        public string Id { get; set; }
        public string Body { get; set; } = string.Empty;
        public string OwnerGuid { get; set; } = string.Empty;
        [MongoDB.Bson.Serialization.Attributes.BsonDateTimeOptions(Kind = DateTimeKind.Utc)]
        public DateTime DateCreated { get; set; }
    }
//context. Database has been connected/set from the Constructor.
public MongoCollection<BsonDocument> General
        {
            get
            {
                return Database.GetCollection<BsonDocument>("general");
            }
        }
//insert operation 1
  internal static string SendSubscribeRequest(string email)
        {
            //check if email exists
            long cursor = Context.General.Count(Query<Subscriber>.EQ(sub => sub.Email, email));
            if (cursor > 0)
                return "Email exists";
            //insert a new Subscriber if email do not exist
            Subscriber subscriber = new Subscriber { Email = email, Id = GetGuid.Normal() };
            Context.General.Insert(subscriber);
            return "Email Saved";
        }

//insert operation 2
  internal static string ResendVerificationEmail(string ownerGUID)
        {
            var token = new TokenDb() { Body = GetToken.New(), OwnerGuid = ownerGUID, DateCreated = DateTime.UtcNow };
            Context.General.Insert(token);
            return Constants.Messages.VerifyMessages.OTPSent;
        }

Я предположил, что следующий код работает нормально, но я обнаружил, что работает только вставка. Оба типа данных были вставлены в документ, но теперь мне нужно запросить как класс aC# из этой коллекции. Вот мой код:

 internal static string VerifyToken(string decStringToken, string decStringGuid)
        {
            var query = Query.And(
                    Query<TokenDb>.EQ(u => u.Body, decStringToken),
                    Query<TokenDb>.EQ(u => u.OwnerGuid, decStringGuid),
                    Query<TokenDb>.GTE(p => p.DateCreated, DateTime.UtcNow.AddMinutes(10)),
                    Query<TokenDb>.LTE(p => p.DateCreated, DateTime.UtcNow)
                );
            long count = Context.General.Count(query);
            if (count > 0)
                return Constants.Messages.VerifyMessages.Versucc;
            return Constants.ErrorCodes.VerificationErrors.TokenExpired;

        }

Как правило, запрос не фильтруется по классу am Querying from. Он просто возвращает все BsonDocuments. Вот другие примеры.

 internal static void VerifySubscriber(string email)
        {
            //using FindOneAs
            var query = Query<Subscriber>.EQ(u => u.Email, email);
            Subscriber subscriber = Context.General.FindOneAs<Subscriber>(query);

           //updating 
            var set = Update<Subscriber>.Set(p => p.Email, email);
            Context.General.Update(query, set);

            //FindAllAs
            MongoCursor<Subscriber> cursor = Context.General
               .FindAllAs<Subscriber>()
               .SetLimit(500);

            //FindAs
            MongoCursor<Subscriber> cursor2 = Context.General.FindAs<Subscriber>(query);
        }

Кто-нибудь может дать некоторые идеи?

0 ответов

Другие вопросы по тегам