如何在 C# 中检索文档及其子文档之一?
How do I retrieve a document along with just one of its child documents in C#?
我在 mongo
中有以下文档
{"_id":{"$oid":"5e7b6cb9606503483494c63a"},"ProductId":{"$binary":{"base64":"V9+9bOaj8kyWrPwdAm0rBQ==","subType":"03"}},"ProductName":"TestProduct1","ProductItems":[{"_t":"ProductItem","ProductId":{"$binary":{"base64":"V9+9bOaj8kyWrPwdAm0rBQ==","subType":"03"}},"Code":"TP1A"},
{"_t":"ProductItem","ProductId":{"$binary":{"base64":"V9+9bOaj8kyWrPwdAm0rDE==","subType":"03"}},"Code":"TP1B"}]}
我想做的是 return 通过对 ProductItem.Code 的查询 return 是一个具有单个匹配子项目的产品。因此保留对象结构但消除除单个匹配子对象之外的所有对象。
我试过了
Product prod = new Product();
IMongoCollection<Product> products = _database.GetCollection<Product>("Products");
var filter = Builders<Product>.Filter.ElemMatch(x=>x.ProductItems, x=>x.Code==code);
prod = products.Find(filter).FirstOrDefault();
return prod;
但这只是 return 搜索根文档和所有子文档而不仅仅是我搜索的根文档和单个子文档。
您可以使用位置运算符将匹配的文档投射到数组中。这是 C# 中的 [-1]
(https://docs.mongodb.com/manual/reference/operator/projection/positional/)
var filter = Builders<Product>.Filter.ElemMatch(x=>x.ProductItems, x=>x.Code==code);
var projection = Builders< Product >.Projection.Include(x => x.ProjectItems[-1])
var found = await collection.Find(filter, projection).ToListAsync();
var matchedProductItem = found[0].ProductItems.First();
我在 mongo
中有以下文档{"_id":{"$oid":"5e7b6cb9606503483494c63a"},"ProductId":{"$binary":{"base64":"V9+9bOaj8kyWrPwdAm0rBQ==","subType":"03"}},"ProductName":"TestProduct1","ProductItems":[{"_t":"ProductItem","ProductId":{"$binary":{"base64":"V9+9bOaj8kyWrPwdAm0rBQ==","subType":"03"}},"Code":"TP1A"},
{"_t":"ProductItem","ProductId":{"$binary":{"base64":"V9+9bOaj8kyWrPwdAm0rDE==","subType":"03"}},"Code":"TP1B"}]}
我想做的是 return 通过对 ProductItem.Code 的查询 return 是一个具有单个匹配子项目的产品。因此保留对象结构但消除除单个匹配子对象之外的所有对象。
我试过了
Product prod = new Product();
IMongoCollection<Product> products = _database.GetCollection<Product>("Products");
var filter = Builders<Product>.Filter.ElemMatch(x=>x.ProductItems, x=>x.Code==code);
prod = products.Find(filter).FirstOrDefault();
return prod;
但这只是 return 搜索根文档和所有子文档而不仅仅是我搜索的根文档和单个子文档。
您可以使用位置运算符将匹配的文档投射到数组中。这是 C# 中的 [-1]
(https://docs.mongodb.com/manual/reference/operator/projection/positional/)
var filter = Builders<Product>.Filter.ElemMatch(x=>x.ProductItems, x=>x.Code==code);
var projection = Builders< Product >.Projection.Include(x => x.ProjectItems[-1])
var found = await collection.Find(filter, projection).ToListAsync();
var matchedProductItem = found[0].ProductItems.First();