У меня есть код, работающий на .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;
}
}