-1

我需要檢查一個字段是否包含特定String,如果它確實 - 按id刪除整個行。 此代碼不工作:物化:按ID刪除整行

Query<Bet> query = ofy().load().type(Movie.class); 

     for (Movie m : query) { 
      List<String> list = m.getActors(); 
      String search = "Brad Pitt"; 
      for (String str : list) { 
       if (str.trim().contains(search)) { 
        ofy().delete().type(Movie.class).id(m.getId()).now(); 

       } 
      } 
     } 
+1

當你說不行的時候....你有錯誤嗎?你需要明確解釋你的意思是「不起作用」。 – Patrice

+0

只是看了你的個人資料。你有7個問題,其中沒有一個你接受了答案。如果你重視別人的幫助,你應該提供有用的答案並接受解決方案。否則,人們可能變得不太願意在未來幫助你。 – konqi

+0

@konqi再次感謝您的耐心和幫助。我會接受答案,抱歉沒有提前做。 –

回答

0

在這種情況下,(刪除與布拉德·皮特的所有電影中它作爲一個演員),你可以刪除這樣的實體:

Query<Movie> query = ofy().load().type(User.class); 

for (Movie m : query) { 
    List<String> list = m.getActors(); 
    String search = "Brad Pitt"; 
    for (String str : list) { 
     if (str.trim().contains(search)) { 
      ofy().delete().entity(m).now(); 
     } 
    } 
} 

不是我刪與delete().entity(...)。另一種選擇是通過鍵來刪除,如delete().key(Key.create(Movie.class, idToRemove)。前者做的事情非常相似,但由於你擁有整個實體,所以你不需要使事情複雜化。此外,如果您使用entity(...)刪除它,它將在實體有@Parent時起作用,而如果您通過密鑰刪除,則必須額外指定Key.create(ancestorKey, Movie.class, idToRemove)中的祖先。

我通常做多個刪除這樣的:

Query<Movie> query = ofy().load().type(User.class); 
List<Movie> toDelete = new ArrayList<>(); 

for (Movie m : query) { 
    List<String> list = m.getActors(); 
    String search = "Brad Pitt"; 
    for (String str : list) { 
     if (str.trim().contains(search)) { 
      toDelete.add(m); 
     } 
    } 
} 

ofy().delete().entities(toDelete).now(); 

在一個循環中執行數據庫操作是壞的風格,如果可能的話,應避免。

一兩件事:

如果必須通過ID刪除實體線路是這樣的:

ofy().delete().type(Movie.class).id(idToDelete); 

然而,正如我在之前暗示,如果你Movie類有一個親本,這將無法正常工作,因爲您必須始終指定整個密鑰,因此祖先的行看起來像這樣:

Key<MyParentClass> parent = Key.create(MyParentClass.class, myParentId); 
ofy().delete().type(Movie.class).parent(parent).id(idToDelete); 

這相當於

ofy().delete().key(Key.create(Key.create(MyParentClass.class, myParentId), Movie.class, idToDelete)); 
+0

Thnx再次!不幸的是,它沒有工作,我有一個錯誤:'99%端點配置沒有更新。當Google Cloud Endpoints服務器嘗試與其通信時,該應用返回了錯誤。 com.google.appengine.tools.admin.AppVersionUpload checkEndpointsServingStatusResult 99%有關更多信息,請參閱部署故障排除文檔:https:// developers。 99%忽略端點故障並繼續進行更新。 嚴重:端點配置未更新。當Google Cloud Endpoints服務器嘗試與其通信時,該應用返回了錯誤。 –

+0

@GidiSprintzin完全看起來完全不同。請使用MCV示例(http://stackoverflow.com/help/mcve)打開一個新問題,以便我們分析它。作爲一個起點,我會清理項目並完成重建。 – konqi

+0

我認爲我的代碼的問題是,在字段中我有一個看起來像這樣的數組:'[{「stringValue」:「yyy」,「indexed」:false},{「stringValue」:「Brad Pitt」 ,「indexed」:false},{「stringValue」:「jhon13」,「indexed」:false}]',我不知道如何拉出名字。 –