mongodbに大きな文書コレクションがあり、_idリストのみを取得したい。 Mongodbクエリはdb.getCollection('Documents').find({},{_id : 0, _id: 1})
です。しかし、C#のクエリすべての_idをmongodbコレクションから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();
スローexeption InvalidOperationException: Duplicate element name '_id'.
に私はのみ _idのリストを取得したい、他のfiledsは必要ありません。文書は異なる構造を持ち、他のすべての分野を手動で除外することは困難です。
どのC#クエリが指定されたmongodbクエリdb.getCollection('Documents').find({},{_id : 0, _id: 1}
に対応していますか?
UPDATE:あなたは、私がAsQueryableを使用して、代わりにLINQを使用することをお勧めしますC#のドライバを使用しているので
this.Collection.Find(d => true).Project(d => d.Id).ToListAsync().Result;
ドキュメントには多くのデータが含まれています。 quearyableコレクションでプレーンセレクトを使用している場合、ドライバ**はすべてのドキュメント**のすべてのデータをロードします。大量の大量の文書はサーバ上で膨大な負荷となります。 – Alexey
ドライバがそのように実装されていれば、それはインデックスでもあり、おそらくコレクション自体ではなくインデックスから取得するだろうと私は驚いています。パフォーマンスにベンチマークを付けましたか? – SJFJ
私のベンチマークはExcecutionのクエリ時間で、私の最短時間のクエリは 'db.getCollection( 'Documents')ですfind({}、{_ id:0、_id:1}'。 "{"集計 ":"ドキュメント "、"パイプライン ":[{" $プロジェクト ":{" _id "}"} "、"カーソル ":{}}' – Alexey