C # Mongodb - Получить документ и соответствующие элементы массива - PullRequest
0 голосов
/ 13 мая 2018

Застрял при попытке запросить документ с оценками и комментариями в BsonArray. В результате я пытаюсь получить корневой документ и соответствующие элементы в массиве, которые соответствуют пользователю.

    public class Blends
{
    public BsonObjectId _id { get; set;}
    public BsonObjectId GinID { get; set;}
    public BsonObjectId TonicID { get; set;}
    public BsonObjectId GarnishID { get; set;}
    public string GinName { get; set;}
    public string TonicName { get; set;}
    public string GarnishName { get; set;}
    public double Rating { get; set;}
    public double RatingSum { get; set;}
    public double RatingCount { get; set;}
    public List<Reviews> Review { get; set;}
}

    public class Reviews
{
    public int Commentnumber { get; set; }
    public string User { get; set; }
    public int Rating { get; set; }
    public string Comment { get; set; }
    public int Helpfull { get; set; }
}

Я протестировал много методов, и это возвращает только 1 совпадение в "Review"

var client = new MongoClient(connectionString);
IMongoDatabase db = client.GetDatabase("GinAndTonic");
var collection = db.GetCollection<Blends>("Blends");
var builder = Builders<Blends>.Filter;
var filter = builder.Eq("Review.User", username);
var fieldsbuilder = Builders<Blends>.Projection;
var fields = fieldsbuilder.Include("Review.$");

var result = await collection.Find(filter).Project<Blends>(fields).ToListAsync();

Надеюсь, что кто-то может помочь с этой проблемой.

1 Ответ

0 голосов
/ 14 мая 2018

Это должно помочь вам:

var result = await collection
                .Aggregate().Match(b => b.Review.Any(r => r.User == username))
                .Project(b => new { Review = b.Review.Where(r => r.User == username) })
                       .ToListAsync();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...