使用c#驱动程序从mongodb集合中选择所有_id

Ale*_*xey 5 c# mongodb mongodb-.net-driver

我在 mongodb 中有大量文档集合,只想获取 _id 列表。Mongodb 查询是db.getCollection('Documents').find({},{_id : 0, _id: 1}). 但是在 C# 查询中

IMongoCollection<T> Collection { get; set; }

...

List<BsonDocument> mongoResult = this.Collection.FindAsync(FilterDefinition<T>.Empty, new FindOptions<T, BsonDocument>() { Projection = "{ _id: 0, _id: 1 }" }).Result.ToList();
Run Code Online (Sandbox Code Playgroud)

扔exeptionInvalidOperationException: Duplicate element name '_id'. 我想只有_id列表,不再需要其他的Fileds。文件可能有不同的结构,并排除所有其他手动困难的文件。

什么 C# 查询对应于指定的 mongodb 查询db.getCollection('Documents').find({},{_id : 0, _id: 1}

更新:不提供与从服务器查询大量数据相关的解决方案,例如

this.Collection.Find(d => true).Project(d => d.Id).ToListAsync().Result;
Run Code Online (Sandbox Code Playgroud)

SJF*_*JFJ 5

由于您使用 C# 驱动程序,我建议您使用AsQueryable,然后使用 linq。

在我看来,它更好,因为您不需要魔术字符串,并且您将从您的 linq 知识中受益。然后它看起来像这样

database.GetCollection<T>("collectionname").AsQueryable().Select(x => x.Id);
Run Code Online (Sandbox Code Playgroud)

  • 文档包含许多数据。如果在可查询集合上使用普通选择,驱动程序**加载所有文档的所有数据**。大量大文档对服务器来说是巨大的负载,我**只需要_id列表**。 (2认同)