Mongodb C # AggregateAsync возвращает пустой массив - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть код, работающий на .net core 2.2 с драйвером mongodb 2.8.Я использую Studio 3t для генерации кода C # из запросов SQL для извлечения данных из mongodb.Это прекрасно и дает результаты курсору при извлечении данных из одной коллекции (используя findasync ()).Но когда дело доходит до объединения двух или более коллекций, я использую конвейер и запускаю курсор с помощью метода AggregateAsync ().Дело в том, что курсор вернет 0 (пустой) массив.Но когда я запускаю SQL-запрос в Studio 3T, он выдает правильный вывод json

public async Task<List<Posts>> GetHomeFeedsFromDBAsync()
    {
        try
        {
            var result = new List<Posts>();

            var options = new AggregateOptions()
            {
                AllowDiskUse = true
            };

            PipelineDefinition<BsonDocument, BsonDocument> pipeline = new BsonDocument[]
        {
            new BsonDocument("$project", new BsonDocument()
                    .Add("_id", 0)
                    .Add("Users", "$$ROOT")),
            new BsonDocument("$lookup", new BsonDocument()
                    .Add("localField", "Users.username")
                    .Add("from", "Posts")
                    .Add("foreignField", "username")
                    .Add("as", "Posts")),
            new BsonDocument("$unwind", new BsonDocument()
                    .Add("path", "$Posts")
                    .Add("preserveNullAndEmptyArrays", new BsonBoolean(false))),
            new BsonDocument("$project", new BsonDocument()
                    .Add("Users.username", "$Users.username")
                    .Add("Posts.time", "$Posts.time")
                    .Add("_id", 0))
        };

            using (var cursor = await _collection.AggregateAsync(pipeline, options))
            {
                while (await cursor.MoveNextAsync())
                {
                    var batch = cursor.Current;
                    foreach (BsonDocument document in batch)
                    {
                        var home_feeds = BsonSerializer.Deserialize<Posts>(document);
                        result.Add(home_feeds);
                    }
                }
            }
            return result;
        }
        catch (Exception e)
        {
            throw e;
        }
    }
...