c# - 如何在不获取整个文档的情况下获取字段的值?

标签 c# mongodb mongodb-.net-driver

我知道这似乎是一个非常愚蠢的问题。但无论如何。

Lats 说,我有这样结构的文档集合:

{
  _id: idvalue, 
  name: namevalue, 
  location: 
  {
    long: longvalue, 
    lat: latvalue
  }
}

当然,还有 C# 中的序列化类。

我需要获取由 _id 指定的文档位置。

我尝试通过以下方式做到这一点:

var documentLocation = collection.FindOne("_id", new ObjectId(id)).Location;

但在这种情况下,整个文档将从数据库中获取。我只想获取 json 的“location: {long: longvalue, lat: latvalue}”部分。

我怎样才能做到这一点?

最佳答案

您应该使用Find 而不是FindOneFindOne内部调用Find方法如下:

return Find(query).SetLimit(1).FirstOrDefault()

这意味着您无法通过 FindOne 更改 MongoCursor。但要指定驱动程序应返回哪些字段(通过 SetFields),您需要访问 mongo 游标。

此外,当您指定字段时,驱动程序仍然返回整个对象(而不仅仅是位置),但除指定之外的所有字段都将为 null/空。

最后一个查询:

var documentLocation = collection.Find("_id", new ObjectId(id))
                                 .SetFields(Fields.Include("Location"))
                                // single if you sure that this document always in db
                                 .Single() 
                                 .Location;

此外,即使您没有明确指定,驱动程序也将始终返回 _id 字段。

关于c# - 如何在不获取整个文档的情况下获取字段的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11105499/

相关文章:

c# GetElementsByTagName 然后如何读取内部标签值

c# - 如何使用我的个人电脑在 windows iis 服务器上发布我的网站?

c# - Entity Framework 代码首先多对多关系不起作用

javascript - 检查asp.net后端代码中浏览器的JS是否启用或禁用

c# - 使用 C# 驱动程序在 mongodb 中查找计算值最高的文档

javascript - Chai,测试该函数会抛出正确的错误

node.js - Node JS 适合作为即时通讯服务吗? MongoDB 适合做数据库吗?

c# - Mongo 更新响应说没有更新文档,但是文档在那里

c# - mongodb 和 C# 中的工作单元

c# - MongoDB C# 从组中获取最新文档