C# 如何返回项目位于数组中的mongo文档?
我在mongodb集合中有一个名为“Items”的文档C# 如何返回项目位于数组中的mongo文档?,c#,mongodb,mongodb-.net-driver,C#,Mongodb,Mongodb .net Driver,我在mongodb集合中有一个名为“Items”的文档 我想在按条形码搜索时获取返回的主要对象和特定sku(不是所有sku)。如何在C#中使用mongo驱动程序实现这一点?您可以通过官方驱动程序的AsQueryable界面轻松实现,如下所示: collection.AsQueryable() 。其中(i=>i.sku.Any(s=>s.Barcode==“2222”)) .选择(i=>新项目 { Id=i.Id, ProductName=i.ProductName, sku=i.sku.其中(s
我想在按条形码搜索时获取返回的主要对象和特定sku(不是所有sku)。如何在C#中使用mongo驱动程序实现这一点?您可以通过官方驱动程序的
AsQueryable
界面轻松实现,如下所示:
collection.AsQueryable()
。其中(i=>i.sku.Any(s=>s.Barcode==“2222”))
.选择(i=>新项目
{
Id=i.Id,
ProductName=i.ProductName,
sku=i.sku.其中(s=>s.Description==“第二个sku”)
})
.ToListAsync();
您需要对需要返回的主实体的每个属性进行手动投影,并使用Where
子句简单地过滤SKU
上述内容将转换为如下聚合管道:
[
{
“$match”:{
“SKU”:{
“$elemMatch”:{
“条形码”:“2222”
}
}
}
},
{
“$project”:{
“\u id”:“$\u id”,
“产品名称”:“$ProductName”,
“SKU”:{
“$filter”:{
“输入”:“$SKU”,
“as”:“s”,
“条件”:{
“$eq”:[
“$$s.Barcode”,
"22222222"
]
}
}
}
}
}
]
使用mongodb.entities的测试程序:
使用MongoDB.Bson;
使用MongoDB.Driver;
使用MongoDB.Driver.Linq;
使用MongoDB.Entities;
使用System.Collections.Generic;
使用System.Linq;
使用System.Threading.Tasks;
命名空间测试应用程序
{
公共类项:实体
{
公共字符串ProductName{get;set;}
公共IEnumerable SKU{get;set;}
}
公共类Sku
{
[目的]
公共字符串Id{get;set;}
公共字符串条形码{get;set;}
}
公共静态类程序
{
专用静态异步任务Main()
{
等待DB.InitAsync(“测试”);
等待新项目
{
ProductName=“测试产品”,
SKU=新[]{
新Sku{Id=ObjectId.GenerateNewId().ToString(),Barcode=“11111111”},
新Sku{Id=ObjectId.generateWid().ToString(),Barcode=“2222”},
新Sku{Id=ObjectId.GenerateNewId().ToString(),Barcode=“33333333”}
}
}.SaveAsync();
var item=await DB.Queryable()
.其中(i=>i.SKU.Any(s=>s.Barcode==“2222”))
.选择(i=>新项目
{
ID=i.ID,
ProductName=i.ProductName,
SKU=i.SKU.其中(s=>s.Barcode==“2222”)
})
.ToListAsync();
}
}
}
使用官方驱动程序的AsQueryable
界面,您可以轻松完成此操作,如下所示:
collection.AsQueryable()
。其中(i=>i.sku.Any(s=>s.Barcode==“2222”))
.选择(i=>新项目
{
Id=i.Id,
ProductName=i.ProductName,
sku=i.sku.其中(s=>s.Description==“第二个sku”)
})
.ToListAsync();
您需要对需要返回的主实体的每个属性进行手动投影,并使用Where
子句简单地过滤SKU
上述内容将转换为如下聚合管道:
[
{
“$match”:{
“SKU”:{
“$elemMatch”:{
“条形码”:“2222”
}
}
}
},
{
“$project”:{
“\u id”:“$\u id”,
“产品名称”:“$ProductName”,
“SKU”:{
“$filter”:{
“输入”:“$SKU”,
“as”:“s”,
“条件”:{
“$eq”:[
“$$s.Barcode”,
"22222222"
]
}
}
}
}
}
]
使用mongodb.entities的测试程序:
使用MongoDB.Bson;
使用MongoDB.Driver;
使用MongoDB.Driver.Linq;
使用MongoDB.Entities;
使用System.Collections.Generic;
使用System.Linq;
使用System.Threading.Tasks;
命名空间测试应用程序
{
公共类项:实体
{
公共字符串ProductName{get;set;}
公共IEnumerable SKU{get;set;}
}
公共类Sku
{
[目的]
公共字符串Id{get;set;}
公共字符串条形码{get;set;}
}
公共静态类程序
{
专用静态异步任务Main()
{
等待DB.InitAsync(“测试”);
等待新项目
{
ProductName=“测试产品”,
SKU=新[]{
新Sku{Id=ObjectId.GenerateNewId().ToString(),Barcode=“11111111”},
新Sku{Id=ObjectId.generateWid().ToString(),Barcode=“2222”},
新Sku{Id=ObjectId.GenerateNewId().ToString(),Barcode=“33333333”}
}
}.SaveAsync();
var item=await DB.Queryable()
.其中(i=>i.SKU.Any(s=>s.Barcode==“2222”))
.选择(i=>新项目
{
ID=i.ID,
ProductName=i.ProductName,
SKU=i.SKU.其中(s=>s.Barcode==“2222”)
})
.ToListAsync();
}
}
}
您试过什么吗?这看起来就像JSON。您应该能够使用C#.Sor读取/解析它,几乎没有问题
"_id": {
"$oid": "5fcfa614d588d46ec44cc375"
},
"ProductId": {
"$binary": {
"base64": "LredEr/+9UGY3g5oIDWhPw==",
"subType": "03"
}
},
"ProductName": "ModelProductTest",
"AccountId": {
"$binary": {
"base64": "Gzmr+JvFq0y0YRBOfkj57w==",
"subType": "03"
}
},
"Skus": [
{
"_id": {
"$oid": "5fcfa614d588d46ec44cc376"
},
"ProductSkuId": {
"$binary": {
"base64": "MBLj5bL6C0Cph0fMkpbDZA==",
"subType": "03"
}
},
"ProductId": {
"$binary": {
"base64": "LredEr/+9UGY3g5oIDWhPw==",
"subType": "03"
}
},
"SkuCode": "kkss",
"Barcode": "12345",
"Description": "test",
"StockQuantity": {
"$numberInt": "2"
},
"Costs": [
{
"_id": {
"$oid": "5fcfa614d588d46ec44cc378"
},
"ProductPriceId": {
"$binary": {
"base64": "81rqEsKc9k6y2IQQjE1DJg==",
"subType": "03"
}
},
"ProductSkuId": {
"$binary": {
"base64": "MBLj5bL6C0Cph0fMkpbDZA==",
"subType": "03"
}
},
"DateValidFrom": {
"$date": {
"$numberLong": "1607443988489"
}
},
"Cost": "33"
},
{
"_id": {
"$oid": "5fcfa614d588d46ec44cc379"
},
"ProductPriceId": {
"$binary": {
"base64": "aqdf9S6yUUCIZEjLY/1pvw==",
"subType": "03"
}
},
"ProductSkuId": {
"$binary": {
"base64": "MBLj5bL6C0Cph0fMkpbDZA==",
"subType": "03"
}
},
"DateValidFrom": {
"$date": {
"$numberLong": "1607443988492"
}
},
"Cost": "39"
}
]
},
{
"_id": {
"$oid": "5fcfa614d588d46ec44cc377"
},
"ProductSkuId": {
"$binary": {
"base64": "XFkTknYw2Uyy2ae/F/yj1A==",
"subType": "03"
}
},
"ProductId": {
"$binary": {
"base64": "LredEr/+9UGY3g5oIDWhPw==",
"subType": "03"
}
},
"SkuCode": "kksass",
"Barcode": "12346",
"Description": "test",
"StockQuantity": {
"$numberInt": "6"
},
"Costs": [
{
"_id": {
"$oid": "5fcfa614d588d46ec44cc37a"
},
"ProductPriceId": {
"$binary": {
"base64": "hxWucmMsnkOkRb1j9/EtGA==",
"subType": "03"
}
},
"ProductSkuId": {
"$binary": {
"base64": "XFkTknYw2Uyy2ae/F/yj1A==",
"subType": "03"
}
},
"DateValidFrom": {
"$date": {
"$numberLong": "1607443988492"
}
},
"Cost": "31"
},
{
"_id": {
"$oid": "5fcfa614d588d46ec44cc37b"
},
"ProductPriceId": {
"$binary": {
"base64": "ExyZdI6suE2Zs5oRdeiK9w==",
"subType": "03"
}
},
"ProductSkuId": {
"$binary": {
"base64": "XFkTknYw2Uyy2ae/F/yj1A==",
"subType": "03"
}
},
"DateValidFrom": {
"$date": {
"$numberLong": "1607443988492"
}
},
"Cost": "36"
}
]
}
]