如何使用C#

时间:2017-05-15 01:51:23

标签: c# mongodb mongodb-.net-driver

现在我有一个实体和一个嵌套数组

public class Author {
    public ObjectId Id { get; set; }
    public String Name { get; set; }
    public IEnumerable<Book> Books { get; set; }
}

public class Book {
    public ObjectId Id { get; set; }
    public String ISBN { get; set; }
}

和预定义的mongodb集合,如

var authors = mongodbDatabase.getCollection<Author>("Authors");

问题是,有没有办法直接检索一个或一些&#34; Book&#34;来自MongoDB的指定&#34;作者&#34; (不要检索整个&#34;作者&#34;然后LINQ我想要的书籍)

2 个答案:

答案 0 :(得分:2)

您可以按如下方式使用投影:

var filter = Builders<Author>.Filter.Eq("Books.ISBN", "987654321");
var projection = Builders<Author>.Projection.Include("Books.$").Exclude("_id");
var book = context.AuthorCollection.Find(filter).Project(projection).SingleOrDefault();

这将返回包含该书的BsonDocument

答案 1 :(得分:0)

没有任何静态字符串的另一种方式

var filter = Builders<Author>.Filter.ElemMatch(p=>p.Books,t=>t.ISBN == "987654321");
var projection = Builders<Author>.Projection.Include(p=>p.Books[-1]);
var author = context.AuthorCollection.Find(filter).Project<Author>(projection).SingleOrDefault();

请注意,您需要的数据将以作者身份返回,您可以从author.Books

进行访问