gpt4 book ai didi

c# - 使用 MongoDB 和 C# 查询数组中深度嵌套的对象

转载 作者:行者123 更新时间:2023-12-03 15:59:13 24 4
gpt4 key购买 nike

我对 MongoDB 还很陌生,并且已经面临着一个令人汗颜的挑战。我正在尝试从带有对象的数组中获取一个元素,该数组包含带有对象的数组内部的对象(如果有意义的话)。这就是文档的样子以及我想要得到的:

https://i.imgur.com/W4Wfmhc.png

所以基本上结构如下:

  • 选项菜单
    • 选项菜单主题
      • 选项菜单项

为了获取 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();

如果有人知道我做错了什么或者我如何才能做到这一点,我们将非常感激:)

最佳答案

这就是我最终解决这个问题的方法。这不是我最自豪的作品,因为它没有强类型,但它有效:

var collection = Database.GetCollection<BsonDocument>(_collectionName);    
var query = await collection.Aggregate()
.Match(i => i["subjects.items._id"] == ObjectId.Parse(id))
.Unwind(i => i["subjects"])
.Unwind(i => i["subjects.items"])
.Match(i => i["subjects.items._id"] == ObjectId.Parse(id))
.ReplaceRoot(i => i["subjects.items"])
.FirstOrDefaultAsync();

关于c# - 使用 MongoDB 和 C# 查询数组中深度嵌套的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60747587/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com