我想查詢使用官方的C#驅動程序MongoDB的集合。這裏的對象結構我創建:C#MongoDB的LINQ:無法查詢嵌套列表
IMongoDatabase db = mongoClient.GetDatabase("appdb");
IMongoCollection<MusicFile> musicfiles = db.GetCollection<MusicFile>("files");
public class MusicFile
{
public ObjectId Id { get; set; }
public string Name { get; set; }
public IList<Comment> Comments { get; set; }
}
public class Comment
{
public string Text { get; set; }
}
這是我想要得到一個包含註釋的對象與屬性Text =「註釋1」的任何MusicFile對象的查詢:
musicfiles.AsQueryable().Where(f => f.Comments != null && f.Comments.Any(c => c.Text == "Comment1")).ToList();
我無法使這個查詢工作,它總是返回一個空的列表。我也試過這一點,這也沒有工作:
musicfiles.Find(f => f.Comments.Any(c => c.Text == "Comment1")).ToList()
但是,如果我得到了完整的收集存儲,查詢的工作原理:
musicfiles.Find(FilterDefinition<MusicFile>.Empty).ToList().Where(f => f.Comments != null && f.Comments.Any(c => c.Text == "Comment1")).ToList();
這似乎是一個非常低效的查詢方法。有什麼建議麼?
我在公共汽車上,現在,所以我不能提供一個答案,但我發現,可查詢無法轉換更復雜的查詢。我建議使用過濾器生成器和elemMatch。 – john