我想从MongoDB中删除对象时运行一些逻辑。我正在使用SpringData Mongo。
我正在使用AbstractMongoEventListener,因为可以通过多种方式从集合中删除对象,而我覆盖了
public void onBeforeDelete(BeforeDeleteEvent<Object> event)
方法。但是事件对象中没有任何方法可以返回要删除的对象。
event.getSource()和event.getDocument()返回文档。我怎样才能得到物体。
以某种方式似乎混淆了这一事件。与其他MongoMappingEvent<T>
后代不同的是,此后代继承了MongoMappingEvent<Document>
至AbstractDelteEvent<T>
。我无法解释这种差异。
但是由于我在删除文档之前也需要检索文档,因此我使用调试器进行查找,可以使用一些黑手党的未记录的get(“ Key”)链来检索文档ID。
event.getDocument()
.get("_id", Document.class) // BSON Document!
.getList("$in", ObjectId.class) // ObjectId.class or what ever Type your Id is.
这样,您可以检索文档ID的列表。提取存储库或其他内容,然后使用这些ID来获取文档。
我真的不喜欢使用那些我在文档中找不到的字符串键,因为谁知道什么时候它们会被删除。只要有人提供了一种不太骇人听闻的方法,我就希望删除此答案。
[请注意,此EventHandler完全忽略了Type-Parameter。如果您的实体类型为
MyEntity
,并且您具有类型为BeforeDeleteEvent<SomethingCompletelyDifferent>
的事件侦听器,则仍会获得事件。