Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongo C#驱动程序中的设置字段_C#_Mongodb_Mongodb .net Driver_Mongodb Query - Fatal编程技术网

Mongo C#驱动程序中的设置字段

Mongo C#驱动程序中的设置字段,c#,mongodb,mongodb-.net-driver,mongodb-query,C#,Mongodb,Mongodb .net Driver,Mongodb Query,我使用的是C#mongo驱动程序,我的用户集合如下所示 public class User { public string Name { get; set; } public DateField Date { get; set; } /* * Some more properties */ public List<string> Slugs { get; set; } //I just need to return this

我使用的是C#mongo驱动程序,我的用户集合如下所示

 public class User
{
    public string Name { get; set; }

    public DateField Date { get; set; }

    /*
     * Some more properties
     */

    public List<string> Slugs { get; set; } //I just need to return this property

}
公共类用户
{
公共字符串名称{get;set;}
公共日期字段日期{get;set;}
/*
*更多属性
*/
公共列表slug{get;set;}//我只需要返回这个属性
}
我正在编写一个查询,其中它只返回slugs属性。 为此,我尝试使用mongo驱动程序中的
SetFields(…)
方法。SetFields返回
用户
类型的游标我希望某个属性属于我的
slug
属性类型,这样当我只需要一个属性时就不会返回整个属性集。
可能吗?

是和否。您可以使用聚合框架来更改数据结构,但出于两个原因,我不会这样做:

  • MongoDB通常会尝试保留结构,除非您强制它,特别是因为它使使用静态类型语言更容易(旧的对象/关系不匹配:SQL查询不会在用户或博客文章中“回答”,而是从各种表中收集的一些属性的杂乱拼凑,这可能需要额外的DTO,具体取决于查询本身,这有点难看)
  • 聚合框架查询有点复杂,速度也有点慢,我不会让做一些微观优化的冲动决定很多不必要的复杂性

  • 毕竟,省略几个字段已经是一个微观优化(将索引覆盖的查询放在一边),但在客户端,空字段的成本应该几乎为零。

    在这里,我并没有改变数据的结构,只是想要数据的一个子集,但我看到c#mongo驱动程序返回类类型的cusor中的SetFields。这会增加它的性能吗?我不确定你在说什么。
    SetFields
    不会改变返回类型,并且未填充的字段并不特别昂贵。我在问题中提到了我对set fieldsWell的期望,就像我写的,
    SetFields
    不会更改类型,您的期望是错误的。您可以使用LINQ to Objects'
    Select(p=>p.Slugs)
    将返回一个
    IEnumerable
    ,但请注意,
    IEnumerable
    上的操作可能比
    MongoCursor上的操作慢得多(例如,
    Count()
    :扩展方法
    IEnumerable
    将对整个结果集进行反序列化,而
    MongoCursor
    将简单地向数据库询问计数)。