c# - 组后投影
问题描述
我试图在我的 C# 应用程序中的 Group 子句之后立即进行投影,但出现“不包含 'Project' 的定义”错误。
Mongo DB - 有效的代码:
var pipeline =
[
{
$match:{
externalId: ObjectId("5d1bc6a0fba276130421a415")
}
},
{
$group:{
_id: '$externalId',
nestedArray:{
$push:{
name: '$CodProcesso',
cars: '$AndamentosProcesso'
}
}
}
},
{
$project:{
_id: 0,
IdAgenda: '$_id',
ProcessosVinculados: 1
}
}
];
db.MyCollection.aggregate(pipeline);
C# - 这是没有项目的代码:
var return = db.Set<DataBaseObject>(CollectionName)
.Aggregate()
.Match(doc => doc.Id.Equals(id))
.Group(doc => doc.Id, g => new
{
Id = g.Key,
nestedArray = g.Select(x => new
{
x.Name,
x.cars
})
})
.FirstOrDefault();
C# - 使用项目(和错误)
var return = db.Set<DataBaseObject>(CollectionName)
.Aggregate()
.Match(doc => doc.Id.Equals(id))
.Group(doc => doc.Id, g => new
{
Id = g.Key,
nestedArray = g.Select(x => new
{
x.Name,
x.cars
})
})
.Project<DataBaseObject, ProjectObject>(model => new DataBaseOject
{
externalId = model.Id,
PV = new List<ProjectObject>()
})
.FirstOrDefault();
数据库对象:
[
//Object 1
{
"_id" : ObjectId("5d5696aacb865b4ce4aa0689"),
"externalId" : ObjectId("5d1bc6a0fba276130421a415"),
"name" : 35223,
"cars" : [
{
aquisitionDate: IsoDate("2019-08-16"),
new: true,
model: 'Mustang'
}
]
},
//Object 2
{
"_id" : ObjectId("5d5696aacb865b4ce4aa0689"),
"externalId" : ObjectId("5d1bc6a0fba276130421a415"),
"name" : 35223,
"cars" : [
{
aquisitionDate: IsoDate("2019-08-16"),
new: true,
model: 'Ferrari'
},
{
aquisitionDate: IsoDate("2019-08-16"),
new: true,
model: 'Lamborghini'
}
]
}
]
我希望得到以下对象作为投影的结果:
{
externalId: ObjectId("5d1bc6a0fba276130421a415"),
nestedArray:[
{
name: 'Adrian',
cars: [
{
aquisitionDate: IsoDate("2019-08-16"),
new: true,
model: 'Mustang'
},
{
aquisitionDate: IsoDate("2019-08-16"),
new: true,
model: 'Ferrari'
},
{
aquisitionDate: IsoDate("2019-08-16"),
new: true,
model: 'Lamborghini'
}
]
}
]
}
解决方案
我认为您已经切换了通用参数。 Project
的第一个泛型参数是输入类型,第二个泛型参数是输出类型。但是,您的 lambda 正在返回 aDataBaseObject
它应该返回 a 的位置ProjectObject
。
.Project<DataBaseObject, ProjectObject>(model => new DataBaseOject
{
externalId = model.Id,
PV = new List<ProjectObject>()
})
推荐阅读
- javascript - 如何在 Angular 中拨打肥皂电话?
- widget - web2py 广播小部件返回列表
- c++ - 我怎样才能保留对被移动的东西的引用?
- talend - 下载 Talend Open Studio for ESB 时出现问题
- javascript - 承诺不拒绝
- javascript - Node.js PDFjs 使用 pdfjs-dist 获取特定页面
- powershell - “术语 'Get-MailboxFolderStatistics' 未被识别为 cmdlet 的名称”
- python-3.x - Python If-Condition 与 While-True 无限循环冲突
- android - 如何使用 Android Webview 加载单屏 Web 应用程序?
- python - 使用 Dash plotly 删除响应功能