1

当从 MongoDB 中删除对象时,我想运行一些逻辑。我正在使用 SpringData Mongo。

我正在使用 AbstractMongoEventListener 因为可以通过多种方式从集合中删除对象,并且我正在覆盖

public void onBeforeDelete(BeforeDeleteEvent<Object> event) 

方法。但是事件对象中没有方法可以返回我要删除的对象。

event.getSource() 和 event.getDocument() 返回文档。我怎样才能得到对象。

4

1 回答 1

1

不知何故,这个事件似乎搞砸了。与其他MongoMappingEvent<T>后代不同的是,这个继承了一个MongoMappingEvent<Document>through AbstractDelteEvent<T>。我无法解释这种差异。

但是由于我还需要在删除文档之前检索它们,所以我使用调试器来查找,可以使用一些无证的 get("Key")-chain 来检索文档 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,它不能考虑类型参数。

于 2020-02-10T15:15:24.753 回答