gpt4 book ai didi

c# - $project 或 $group 不支持

转载 作者:太空狗 更新时间:2023-10-29 20:35:55 25 4
gpt4 key购买 nike

我正在尝试使用投影运行聚合,但我得到了 NotSupportedException: $project or $group does not support <document> .我正在使用 mongodb v3.4 运行版本 2.4.4 的驱动程序。

var filter = Builders<T>.Filter.Regex(x=>x.Value,"/test/gi");

var aggregate = collection.Aggregate()
.Match(filter)
.Project(x => new
{
Idx = x.Value.IndexOf("test"),
Result = x
})
.SortBy(x => x.Idx);

我以为IndexOfCPsupported .

我做错了什么?

最佳答案

问题不是由 IndexOf 引起的,而是由您的投影引起的。投影不应包括文档本身,MongoDB .Net 驱动程序不支持这一点。因此,以下不将 x 对象包含到投影中的查询将正常工作:

var aggregate = collection.Aggregate()
.Match(filter)
.Project(x => new
{
Idx = x.Value.IndexOf("test"),
// Result = x
})
.SortBy(x => x.Idx);

这里有几个可能的修复方法。最好的选择是在投影中不包含整个文档,而只包含进一步逻辑实际需要的字段,例如:

var aggregate = collection.Aggregate()
.Match(filter)
.Project(x => new
{
Idx = x.Value.IndexOf("test"),
Value = x.Value,
// ...
})
.SortBy(x => x.Idx);

但是,如果您需要文档对象本身,您可以将整个集合获取到客户端,然后使用 LINQ to objects:

var aggregate = collection.Aggregate()
.Match(filter)
.ToList()
.Select(x => new
{
Idx = x.Value.IndexOf("test"),
Result = x
})
.OrderBy(x => x.Idx);

将此方法作为最后一个选项使用,因为它对服务器和客户端的负载都很大。

关于c# - $project 或 $group 不支持 <document>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47383632/

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