2017-09-14 92 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

結果是一個對象,如果它已經找到或null沒有找到。正如接受的答案說 – albert

回答

1

FindOneAndUpdate將返回文檔(可以配置無論是舊版本或使用FindOneAndUpdateOptions更新的版本)。

如果在數據庫中找不到文檔,返回的文檔應該只是null,因此您可以使用簡單的空檢查。

+0

因此,澄清:如果您通過'新的FindOneAndUpdateOptions {ReturnDocument = ReturnDocument.Before}'和調用返回'null',文檔不存在,所以操作是插入。非空返回值表示更新。 – CodeCaster

0

選項部分貓鼬documentation狀態:

選項:

  • ...
  • UPSERT:布爾 - 創建對象,如果它不存在。默認爲false。
  • ...

應該有一個upsert參數,該參數如果設置爲true,如果沒有被發現將創建一個新的對象。但是,這默認爲false,因此您的調用不應創建新的數據庫條目。我認爲C# driver應該行爲相同。如果沒有,你可以在Upsert參數設置爲false,看到here

相關問題