2017-12-19 2 views
0

es ist mein Verständnis, dass PartialUpdateObject in Algolia zu verwenden, muss ich die objectID kennen. SourceTeilupdate JSON-Objekt mit spezifischen Schlüssel anstelle von Objekt-ID in Algolia

In meiner Situation kenne ich die objectID jedoch nicht direkt aus der Fledermaus. Lassen Sie mich erklären ...

Ich habe eine Musikseite, wo ein Künstler Musik einreichen kann und diese JSON mit Song-Informationen gefüllt wird in einem Index in Algolia gespeichert. Jetzt kann der Künstler auch sein Profil aktualisieren (um seinen Künstlernamen usw. zu ändern). Ich habe zwei getrennte Indizes. Eine namens Song, die alle Liedinformationen enthält, und Artist, die Künstlerinformationen enthält. Wenn der Künstler sein Profil ändert, um seinen Künstlernamen zu ändern, versuche ich, diese Änderung über seinen Artist Account JSON und alle Songs, die von ihm hochgeladen wurden, wiederzugeben. Wenn der JSON nicht auf der Liedseite aktualisiert wurde, würde er immer noch seinen/ihren alten Namen anzeigen ... nicht gut!

Hier ist, was die Artist JSON wie folgt aussieht:

{ 
    "AccountInfoID": 94, 
    "AccountType": "Artist", 
    "DisplayName": "Unlike Pluto", 
    "ImageURL": "https://ucarecdn.com/81abba2d-7966-48ac-abab-79a2ecc97811/", 
    "UserID": "", 
    "objectID": "94" 
} 

Hier ist, was die Song JSON aussieht. Beachten Sie auch, dass die eine Konstante zwischen den beiden JSON-Dateien die AccountInfoID ist, die das Lied mit dem Künstler verbindet, in diesem Fall im Gegensatz zu Pluto. Die objectID für Song ist anders. Und wenn ich ein anderes Lied laden waren alle folgenden Werte wäre anders, außer AccountInfoID (nur zu klären):

{ 
    "ApprovalFL": true, 
    "FreeFL": true, 
    "LicenseFL": true, 
    "AccountInfoID": 94, 
    "AlbumID": 117, 
    "SongID": 105, 
    "BPM": 92, 
    "AccountImageURL": "https://ucarecdn.com/81abba2d-7966-48ac-abab-79a2ecc97811/", 
    "AccountType": "Artist", 
    "AlbumName": "Let It Bleed", 
    "Artist": "Unlike Pluto", 
    "FeaturedArtist": "Cristina Gatti", 
    "ImageURL": "https://ucarecdn.com/d60c9302-eacf-4050-920d-9d54ce93cd46/", 
    "iTunesURL": null, 
    "LabelName": "Lowly Palace", 
    "Title": "Let It Bleed", 
    "URL": "https://ucarecdn.com/b75e6e30-7082-49e5-b5d5-93d23e74af21/", 
    "UserID": "", 
    "UploadDate": "2017-12-16T01:55:22.81", 
    "Duration": "2017-12-16T00:03:20", 
    "objectID": "105" 
} 

die Künstler JSON zu aktualisieren, ist es keine große Sache:

dynamic registerArtistObjs = new JObject(); 
registerArtistObjs.DisplayName = accountInfo.DisplayName; 
registerArtistObjs.ImageURL = accountInfo.ImageURL; 
registerArtistObjs.objectID = accountInfo.AccountInfoID; 
var artistIndexHelper = HttpContext.Application.Get("ArtistIndexHelper") as IndexHelper<ArtistAlgoliaModel>; 
artistIndexHelper.PartialUpdateObject(registerArtistObjs); 

jedoch Das Song-Update ist kniffliger, da ich alle Songs finden muss, die von diesem Künstler hochgeladen wurden. Also wie oben erwähnt, müsste ich alle Songs mit AccountInfoID: 94 finden, so dass ich die objectID bekommen und Artist im Lied JSON aktualisieren könnte. Was ist der beste Ansatz dafür oder gibt es einen leichteren Weg, den ich vermisse?

Hier, wo ich mit dem Code bin den Namen des Künstlers in dem Song-Index zu aktualisieren, aber ich habe keine Ahnung, wie all objectID Werte aus dem Song-Index zu erhalten, die zum Beispiel enthält, AccountInfo: 94:

dynamic registerSongObjs = new JObject(); 
registerSongObjs.Artist = accountInfo.DisplayName; 
registerSongObjs.objectID = ??????????Possibly Multiple values????????? 
var songIndexHelper = HttpContext.Application.Get("SongIndexHelper") as IndexHelper<SongAlgoliaModel>; 
songIndexHelper.PartialUpdateObject(registerSongObjs); 
+0

@mjwills hey wieder, es tut ... sorta, fand ich eine ähnliche Art und Weise (Ihre dritte Methode in unserer ursprünglichen Frage verwenden, die geholfen). Ich werde das als für dich richtig markieren. Irgendwelche Gedanken zu dieser Frage? –

Antwort

0

ich war in der Lage, es herauszufinden, indem Sie die folgenden Aktionen ausführen:

dynamic registerSongObjs = new JObject(); 
var songs = EntityDataAccess.GetSongsByAccountInfoID(accountInfo.AccountInfoID); 
        foreach (var item in songs) 
        { 
         registerSongObjs.Artist = accountInfo.DisplayName; 
         registerSongObjs.objectID = item.SongID; 
         songIndexHelper.PartialUpdateObject(registerSongObjs); 
        } 
0

Wie du bereits erwähnt hast, musst du "alle Songs finden können, die von diesem Künstler hochgeladen wurden".

Wenn Sie dies verfolgen (ich nehme an, Ihre Website muss sich auf irgendeine Art von Datenbank verlassen?), Wenn ein Künstler aktualisiert wird, könnten Sie alle relevanten SongID für diesen Künstler abrufen, und daraus die Liste der Objekt, das Sie am Ende von algolia aktualisieren müssen.

Verwandte Themen