使用C#驱动程序在{mongodb中执行地图

时间:2016-05-22 13:14:53

标签: c# mongodb mongodb-.net-driver

我有一个我要映射的对象(对于一个实例Person)。

我想要像LINQ的Select方法那样执行一些安全的操作,然后返回IEnumerable<ObjectId>而不是IEnumerable<Person>

我还发现我一直在寻找的方法在mongodb术语中称为map

有没有可以与C#驱动程序一起使用的等价物?

Mongo示例:我正在谈论的mongo函数是

db.getCollection('Persons').find({}).map( function(p) { return p._id; } );

注意:我已经知道了

var persons= await personsCollection.Find(_ => true).ToListAsync();
return persons.Select(p=>p._id);

但我正在寻找一些东西&#34;更整洁&#34;那已经是mongodb司机的一部分了。

修改

我正在寻找超出预测的东西。

我的代码目前看起来像这样:

var personsCursor= personsCollection.Find(_ => true);
var personsProjection = personsCursor.Project<Person>(Builders<Person>.Projection.Include(p => p._id));
var personsIds = await personsProjection.ToListAsync();
return personsIds .Select(p => p._id.ToString());

2 个答案:

答案 0 :(得分:2)

为此,您可以使用Projection;

来自文档:

  

投放字段

     

很多时候,我们不需要文档中包含的所有数据。该   投影构建器将有助于构建投影   查找操作的参数。下面我们将排除“_id”字段   并输出第一个匹配的文件:

var projection = Builders<BsonDocument>.Projection.Exclude("_id");
var document = await collection.Find(new BsonDocument()).Project(projection).FirstAsync();
Console.WriteLine(document.ToString());

然后,在您自己的投影中,您可以指定需要返回的字段。如果你转到上面的链接,你可以找到一些关于投影和mongo c#driver的文档。

修改

此外,您可以使用projection builder指定您需要返回的内容:

var projection = Builders<BsonDocument>.Projection.Expression(d => d._id);
// and then put this projection to your query
var items = await collection.Find(new BsonDocument()).Project(projection).ToListAsync();

现在,每个项目只应表示为_id

希望它会有所帮助。

答案 1 :(得分:0)

在C#中映射属性,需要从mongodb官方文档中验证

https://mongodb.github.io/mongo-csharp-driver/2.7/reference/bson/mapping/