如何使用 C# 从 MongoDB 中检索嵌套数组元素
How to retrieve nested array element from MongoDB using C#
现在我有一个实体和一个嵌套数组
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");
问题来了,有没有一种方法可以通过指定的 "Author" 从 MongoDB 中直接检索一个或某些 "Book"(而不是检索整个 "Author" 然后 LINQ我想要的书)
您可以使用投影如下:
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();
这将return一本BsonDocument
有这本书。
没有任何静态字符串的不同方式
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();
请注意,您需要的数据将 return 作为作者,您可以从 author.Books
获得
现在我有一个实体和一个嵌套数组
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");
问题来了,有没有一种方法可以通过指定的 "Author" 从 MongoDB 中直接检索一个或某些 "Book"(而不是检索整个 "Author" 然后 LINQ我想要的书)
您可以使用投影如下:
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();
这将return一本BsonDocument
有这本书。
没有任何静态字符串的不同方式
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();
请注意,您需要的数据将 return 作为作者,您可以从 author.Books