从MongodbC中读取特定字段值#

时间:2017-10-28 06:23:23

标签: mongodb mongodb-query mongodb-.net-driver mongodb-csharp-2.0

最近我开始使用MongoDB。我必须使用mongodb C#driver从mongodb读取特定字段(列)。这意味着我必须读取特定字段,无论值是什么。我只需指定字段。我有非结构化我的db.so中的数据我的项目中没有模型类。

我使用Getcollection<>读取了Collection来自C#库。然后我坚持完成这项任务。

我如何实现?

1 个答案:

答案 0 :(得分:0)

有几种方法可以实现这一点,具体取决于编译时或运行时是否知道非结构化数据。

对于编译类型,您可以对数据的投影进行建模,并使用投影构建器指定投影的工作方式

var collection = database.GetCollection<Customer>("customers");

var document = new Customer(){Name = "Joe Bloggs", Age = 30, Address = "York"};
collection.InsertOne(document);

var projection = Builders<Customer>
                    .Projection
                    .Include(x => x.Id).Include(x => x.Age);

var customerProjection = await collection.Find(x => true)
                    .Project<CustomerProjection>(projection)
                    .FirstAsync();

上面我们将返回类型指定为泛型参数,但如果我们省略了这个,那么我们将返回BsonDocument,根据您的使用情况,这将是有用的

var bsonDocument = await collection.Find(x => true)
                    .Project(projection)
                    .FirstAsync();

我们也可以使用linq表达式获得相同的结果:

var projection = await collection.Find(x => true)
    .Project(x => new {x.Id, x.Age}).FirstAsync();

这将导致返回带有Id和年龄的异常类型。

但是,如果我们在编译时不知道数据并且在运行时基于魔术字符串的字段,那么您需要将BsonDocument传递给GetCollection方法:

var collection = database.GetCollection<BsonDocument>("customers");

您现在可以使用上述两种方法来投影bson文档,但它将基于每个字段。

但是,我建议尝试使用Project构建器,因为它会让您的生活更轻松:

var projectionDefinition = Builders<BsonDocument>.Projection
                                        .Include("age")
                                        .Exclude("_id");

var projection = await collection.Find(x => true)
                    .Project(projectionDefinition)
                    .FirstAsync();