33

documentなしで MongoDB に s を挿入しましたidそして、デフォルトで割り当てられているMongoDBObjectIdを検索してそれらを取得したいと思います。

これが私の試みです-

var query_id = Query.EQ("_id", "50ed4e7d5baffd13a44d0153");
var entity = dbCollection.FindOne(query_id);
return entity.ToString();

そして、次のエラーが発生します-

タイプ 'System.NullReferenceException' の初回例外が発生しました

何が問題ですか?

4

5 に答える 5

64

ObjectIdのインスタンスを作成してから、そのインスタンスを使用してクエリを実行する必要があります。そうしないと、クエリObjectIdが s と文字列を比較し、一致するドキュメントを見つけることができません。

これはうまくいくはずです:

var query_id = Query.EQ("_id", ObjectId.Parse("50ed4e7d5baffd13a44d0153"));
var entity = dbCollection.FindOne(query_id);
return entity.ToString();
于 2013-01-14T09:30:32.473 に答える
33

最新の公式MongoDB.DriverのC#でこれを書きます-

var filter_id = Builders<MODEL_NAME>.Filter.Eq("id", ObjectId.Parse("50ed4e7d5baffd13a44d0153"));
var entity = dbCollection.Find(filter).FirstOrDefault();
return entity.ToString();

idstring からに変換しなくても、同じ結果を得ることができますObjectId[BsonRepresentation(BsonType.ObjectId)]ただし、モデル クラスに beforeid属性を追加する必要があります。

コードは、ラムダ式を使用してさらに単純化することもできます-

var entity = dbCollection.Find(document => document.id == "50ed4e7d5baffd13a44d0153").FirstOrDefault();
return entity.ToString();
于 2016-02-07T10:25:29.640 に答える
2

選択した答えは正しいです。Query.EQ に戸惑う人のために、基本的な更新を記述する別の方法を次に示します (mongodb ドキュメント全体を更新します)。

string mongoDocumentID = "123455666767778";
var query = new QueryDocument("_id", ObjectId.Parse(mongoDocumentID)); 
var update = new UpdateDocument { { "$set", documentToSave } };
mongoCollection.Update(query, update, UpdateFlags.Multi);

ObjectId オブジェクトは、実際にオブジェクト ID で検索する場合に必要です。それ以外の場合は、文字列を objectid タイプと比較するため、一致しません。このように、フィールド名が正しいかどうかに関係なく、Mongo は非常に型に厳密です。

于 2014-01-24T00:26:45.130 に答える