因此,如果对象存在,我使用MongoDB驱动程序更新数据库中的对象字段值。
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 :(得分:3)
FindOneAndUpdate
将返回文档(您可以使用FindOneAndUpdateOptions
配置它是旧版本还是更新版本。)
如果在数据库中找不到文档,则返回的文档应该只是null
,因此您只需使用简单的空检查。
答案 1 :(得分:1)
选项部分中的猫鼬documentation状态:
选项:强>
- ...
- upsert:bool - 创建对象(如果它不存在)。默认为false。
- ...
应该有一个upsert
参数,如果设置为true,则会创建一个新对象(如果没有找到)。但是,默认为false,因此您的调用不应创建新的数据库条目。
我认为C# driver
的行为应该相同。如果没有,您可以将Upsert
参数设置为false,请参阅here