Как применять объединения между MongoDb Collection в C # - PullRequest
0 голосов
/ 10 октября 2018

Я беру простой пример, чтобы продемонстрировать свою проблему. Есть два класса в C #

class Table1
    {
        [BsonId]
        public ObjectId _Id { get; set; }

        [BsonElement]
        public string Name { get; set; }
    }

class Table2
    {
        [BsonId]
        public ObjectId _Id { get; set; }

        [BsonElement]
        public int Age { get; set; }

        [BsonElement]
        public ObjectId UserId { get; set; }
    }

Ниже приведены данные в MongoDB:
Таблица 1:

{"_ id": "5bbd9b904b235724d42d61b1", "Name": "User1"}


Table2:

{"_ id": "5bbd9bad4b235724d42d61b2", "Age": 25, "UserId": "5bbd9b904b235724d42d61b1"}


Сейчас создаемприсоединиться к консольному приложению c #

static void ViewRecords()
    {
        MongoContext db = new MongoContext();
        var Table1 = db._database.GetCollection<Table1>("Table1");
        var Table2 = db._database.GetCollection<Table2>("Table2");

        var r = from t1 in Table1.AsQueryable()
                join t2 in Table2.AsQueryable() on t1._Id equals t2.UserId into result
                select new Table1()
                {
                    _Id = t1._Id,
                    Name = t1.Name
                };

        foreach (var a in r)
        {
            Console.WriteLine(a.Name);
        }
    }

Теперь выдается исключение

Оператор запросов GroupJoin не поддерживается.

Ссылки, которые у меня естьследуют: Ссылка .

Я установил mongocsharpdriver 2.7.0 и MongoDB.Driver 2.7.0 через менеджер пакетов nuget.

Я бьюсь головой об стену за последние 2 дня из-за этого ... любая поддержка будеточень ценится.

1 Ответ

0 голосов
/ 10 октября 2018

Когда я пытался снова и снова, я нашел что-то очень интересное.Кажется, что то же самое работает нормально после нескольких серьезных изменений.
1. Измените MongoClient на IMongoClient и MongoDatabase на IMongoDatabase

public class MongoContext
    {
        IMongoClient _client;
        public readonly IMongoDatabase _database;

        public MongoContext()
        {
            //Reading credentials from Web.config file
            _client = new MongoClient("mongodb://" + ConfigurationManager.AppSettings["MongoHost"] + ":" + ConfigurationManager.AppSettings["MongoPort"]);
            _database = _client.GetDatabase(ConfigurationManager.AppSettings["MongoDatabaseName"]);
        }
    }

Мне нужно удалить MongoServer из моего контекстного класса.

Измените метод ViewRecords на следующий:

    static List<Table1> ViewRecords()
{
    try
    {
        MongoContext db = new MongoContext();
        IMongoCollection<Table1> = db._database.GetCollection<Table1>("Table1");
        IMongoCollection<Table2> = db._database.GetCollection<Table2>("Table2");

        var r = from t1 in Table1.AsQueryable()
                join t2 in Table2.AsQueryable() on t1._Id equals t2.UserId
                select new Table1()
                {
                    _Id = t1._Id,
                    Name = t1.Name
                };

        return r.ToList();
    }
    catch (Exception ex) { throw ex; }
}

Теперь это работает .. Я получил этот совет из какого-то блога, поделюсь этой ссылкой, если я снова нашел то же самое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...