如何在 MongoDB For C# 驱动程序中使用 FindOne 中的 SetField

发布于 2024-11-18 13:33:52 字数 235 浏览 2 评论 0原文

我使用 mongodb 的官方 C# 驱动程序,我想使用 FindOne 查询(如 Find)中的 SetFields。

var query = Query.EQ("Name", name);
Users.Find(query).SetFields(Fields.Exclude("Password"));

是否可以这样做,因为 FindOne 返回实际的类而不是 mongodb 游标。

I use offical C# Driver for mongodb, I want to use SetFields from a FindOne query like Find.

var query = Query.EQ("Name", name);
Users.Find(query).SetFields(Fields.Exclude("Password"));

Is it possible to do that as FindOne return a actual class instead of mongodb cursor.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

蛮可爱 2024-11-25 13:33:52

MongoCursor 的 SetFields 方法。

FindOne 方法只是 MongoCursor 的包装,内部看起来是这样的:

public virtual TDocument FindOneAs<TDocument>() {
   return FindAllAs<TDocument>().SetLimit(1).FirstOrDefault();
}

如果您想向其中添加排除字段功能,您可以简单地为 MongoCollection 添加扩展方法:

public static class MongodbExtentions
{
    public static T FindOne<T>(this MongoCollection collection, 
                               params string[] excludedFields)
    {
        return collection.FindAllAs<T>().SetLimit(1)
                                        .SetFields(excludedFields)
                                        .FirstOrDefault();
    }
}

并像这样使用它:

 var user = Users.FindOne<User>("Password");

SetFields method of MongoCursor.

Method FindOne just wrapper around MongoCursor and internally it looks so:

public virtual TDocument FindOneAs<TDocument>() {
   return FindAllAs<TDocument>().SetLimit(1).FirstOrDefault();
}

If you want add Exclude Fields functionality to it you can simply add extention method for MongoCollection :

public static class MongodbExtentions
{
    public static T FindOne<T>(this MongoCollection collection, 
                               params string[] excludedFields)
    {
        return collection.FindAllAs<T>().SetLimit(1)
                                        .SetFields(excludedFields)
                                        .FirstOrDefault();
    }
}

And use it like this:

 var user = Users.FindOne<User>("Password");
慢慢从新开始 2024-11-25 13:33:52

我不确定 findOne 中的排除。
但您可以更好地使用带有 limit 1 的 find 来代替 findOne 。
这将返回一个游标,它当然支持排除字段。
像这样的东西:

var theCursor = Users.Find(query).SetFields(Fields.Exclude("Password")).SetLimit(1) ;
var myItem = null;
foreach (var item in cursor) {
    myItem = item ;
}

I am not sure about exclusion in findOne.
But instead of findOne, you can better use find with limit 1 .
That would return a cursor, which will ofcourse support exclusion of a field.
Something like :

var theCursor = Users.Find(query).SetFields(Fields.Exclude("Password")).SetLimit(1) ;
var myItem = null;
foreach (var item in cursor) {
    myItem = item ;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文