我知道这似乎是一个非常愚蠢的问题。但无论如何。
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
而不是FindOne
。 FindOne
内部调用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/