2016-07-05 1 views
1

私は最後のドライバを使用しています。マイドキュメントは、フォームMongoデータベースのすべての文書から1つのフィールドのリストを取得しようとしています

{ 
    "ItemID": 292823, 
    .... 
} 

の最初の問題である:私はそれらを並べ替え、すべてのアイテムIDのリストを取得しようとする、としています。しかし、私の検索では、すべての_idとItemIDのどれも戻っていません。私は間違って何をしていますか?

var f = Builders<BsonDocument>.Filter.Empty; 
    var p = Builders<BsonDocument>.Projection.Include(x => x["ItemID"]); 
    var found= collection.Find(f).Project<BsonDocument>(p).ToList().ToArray(); 

出力を照会しようとすると、次のようになります。

found[0].ToJson() 
"{ \"_id\" : ObjectId(\"56fc4bd9ea834d0e2c23a4f7\") }" 

これはItemIDが不足していて、単にmongo idを持っています。

解決方法:私はケースを台無しにしました。 itemIDではなくitemIDです。私はまだソートに問題があります。

第二の問題:私は、x [「アイテムID」] AsInt32を持っているために、第2行を変更しようとしたが、その後私はにタイプから「可能System.Int32」の子表現を書き換えエラー

とInvalidOperationExceptionがしました 'MongoDB.Bson.BsonValue'は許可されません。これは、操作の意味を に変更するためです。これが意図的な場合は、 「VisitUnary」を上書きし、この書き換えを許可するように変更してください。

私はクエリに並べ替えを追加できるようにintとしてそれらを必要とします。私の種類は以下の通りです:

var s = Builders<BsonDocument>.Sort.Ascending(x => x); 
    var found= collection.Find(f).Project<BsonDocument>(p).Sort(s).ToList().ToArray(); 

これは正しい方法ですか?

答えて

1

解決策が見つかりました。

//Get all documents 
var f = Builders<BsonDocument>.Filter.Empty; 

//Just pull itemID 
var p = Builders<BsonDocument>.Projection.Include(x => x["itemID"]); 

//Sort ascending by itemID 
var s = Builders<BsonDocument>.Sort.Ascending("itemID"); 

//Apply the builders, and then use the Select method to pull up the itemID's as ints 
var found = collection.Find(f) 
     .Project<BsonDocument>(p) 
     .Sort(s) 
     .ToList() 
     .Select(x=>x["itemID"].AsInt32) 
     .ToArray(); 
関連する問題