我对MongoDB相当陌生,已经面临着艰巨的挑战。我正在尝试从具有对象的数组中的对象中获取一个元素(如果有道理)。这是文档的外观以及我要获取的内容:
所以基本上结构如下:
要获得我匹配的OptionMenuItem,可以使用MongoDB Compass工具中的聚合管道工具将其拉出
[{
$unwind: {
path: '$subjects'
}
}, {
$unwind: {
path: '$subjects.items'
}
}, {
$project: {
_id: '$subjects.items._id',
item: '$subjects.items'
}
}, {
$match: {
_id: ObjectId('5e6eaef8ae35a418f4f6dbd4')
}
}]
然后我尝试将其翻译成C#并没有成功,这是我所学到的:
var optionMenuItem = await collection.Aggregate()
.Unwind<OptionMenu, OptionMenuSubject>(i => i.Subjects)
.Unwind<OptionMenuSubject, OptionMenuItem>(i => i.Items)
.Match(i => i.Id == id)
.ToListAsync();
如果有人知道我在做什么错或如何解决这个问题,将不胜感激:)
似乎应该更改此行:
Unwind<OptionMenuSubject, OptionMenuItem>(i => i.Items)
我认为它会产生:
{
$unwind: {
path: '$items'
}
这是错误的路径,因为您之前没有运行$replaceRoot
,并且在第一个items
之后,items
数组将嵌套在$unwind
对象内部。尝试更改您的C#类型,以便表达式树读取器将能够构建$unwind
路径,例如$subjects.items
:
Unwind<OptionMenuSubject, OptionMenuItem>(i => i.Subjects.Items)