使用 C# 驱动程序在 mongodb 中执行映射

Performing Map in mongodb with C# driver

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

我想执行一些非常像 LINQ 的 Select 方法和 return 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);

但我正在寻找一些东西 "tidier",它已经是 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());

为此,您可以使用 Projection;

来自文档:

Projecting Fields

Many times we don’t need all the data contained in a document. The Projection builder will help build the projection parameter for the find operation. Below we’ll exclude the “_id” field and output the first matching document:

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

然后,在您自己的投影中,您可以指定需要哪些字段 return。如果你去上面的 link,你可以找到一些关于投影和 mongo c# 驱动程序的文档。

编辑:

此外,您可以使用projection builder来指定您需要的return:

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

希望对您有所帮助。

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

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