我有一个我要映射的对象(对于一个实例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());
答案 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/