2017-09-14 4 views
0

オブジェクトが存在する場合、MongoDBドライバを使用してデータベース内のオブジェクトフィールド値を更新しています。c#MongoDBドライバ:FindOneAndUpdate文書が見つかったかどうかを知る方法?

IMongoDatabase db = _mongoClient.GetDatabase(DataBase); 
IMongoCollection<Evento> collection = db.GetCollection<Evento>(str_collection); 

collection.FindOneAndUpdate(
    e => e._id == eventoId && 
    e._visitantes.Any(v => v._empresa == empresa && 
     v._nombre == nombre && 
     v._apellidos == apellidos), 
    Builders<Evento>.Update.Set(e => e._visitantes[-1]._asistido, true)); 

私の質問は次のとおりです。オブジェクトがデータベース内に見つかりましたか?私はドキュメンテーションを見て、何も見つけられませんでした。

存在しない場合は、新しいオブジェクトを作成する必要はありません。オブジェクトが値を変更したことを検出したかどうかを知りたいだけです。

ありがとうございました。

+0

FindOneAndUpdateから返された結果をコンソールMongoで返します。影響を受けるオブジェクトの数を返します。おそらく結果にはこの情報が含まれています。 –

+0

結果が見つかったか、または何も見つからない場合、結果はオブジェクトです。受け入れられた答えは – albert

答えて

1

FindOneAndUpdateは(あなたはそれが古いバージョンやFindOneAndUpdateOptionsを使用して更新されたバージョンのかどうかを設定することができます)ドキュメントを返します見ることができました。

データベースに文書が見つからない場合、返される文書は単にnullである必要があります。したがって、単純なヌルチェックを使用することができます。

+0

と書いてありますので、明確にするために: '新しいFindOneAndUpdateOptions {ReturnDocument = ReturnDocument.Before}'を呼び出し、 'null'を返した場合、その文書は存在しないので、操作は挿入物でした。 null以外の戻り値は、更新を示します。 – CodeCaster

0

マングースオプションセクションでdocumentation状態:

オプション:

  • ...
  • アップサート:ブール値 - それが存在しない場合は、オブジェクトを作成します。デフォルトはfalseです。
  • ...

が見つからなかった場合はtrueに設定した場合は、upsertパラメータは、新しいオブジェクトが作成されますする必要があります。ただし、これはデフォルトではfalseなので、呼び出しによって新しいデータベースエントリが作成されるべきではありません。

C# driverは同じように動作するはずです。ない場合は、falseにUpsertパラメータを設定here

関連する問題