在Algolia中使用特定键而不是objectID部分更新JSON对象

时间:2017-12-19 05:45:39

标签: c# json algolia

我的理解是,要在Algolia中使用PartialUpdateObject,我需要知道objectIDSource

然而,在我的情况下,我并不直接知道objectID。让我解释一下......

我有一个音乐网站,艺术家可以提交音乐,这个充满歌曲信息的JSON存储在Algolia的索引中。现在,艺术家还可以更新他们的个人资料(更改他们的艺术家姓名等)。我有两个单独的指数。一个名为Song,其中包含所有歌曲信息,Artist包含艺术家信息。当艺术家编辑他的个人资料以更改他的艺术家姓名时,我试图让这个变化反映在他的Artist帐户JSON和他/她上传的所有歌曲中。如果JSON没有在歌曲方面更新,它仍然会显示他/她的旧名字......不好!

以下是Artist JSON的样子:

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

这是Song JSON的样子。还要注意两个json文件之间的一个常量是AccountInfoID,这将歌曲链接到艺术家,在这种情况下与Pluto不同。 objectID的{​​{1}}不同。如果我要上传另一首歌曲,除了Song之外,以下所有值都会有所不同(只是为了澄清):

AccountInfoID

要更新Artist JSON,这没什么大不了的:

{
  "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"
}

然而,歌曲更新比较棘手,因为我需要能够找到该艺术家上传的所有歌曲。如上所述,我需要找到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); 的所有歌曲,这样我才能获得歌曲JSON中的AccountInfoID: 94和更新objectID。这样做的最佳方法是什么,或者是否有一种我更容易丢失的方法?

这是我在使用代码来更新Song索引中的Artist名称的地方,但我不知道如何从Song索引中获取包含的所有Artist值,例如{ {1}}:

objectID

2 个答案:

答案 0 :(得分:0)

正如您所说,您需要能够找到该艺术家上传的所有歌曲&#34;。

如果你跟踪这个(我假设你的网站必须依赖某种数据库?),那么当艺术家更新时,你可以获取该艺术家的所有相关的songID,并从中推断出对象列表你需要更新algolia的结尾。

答案 1 :(得分:0)

我能够通过以下方式解决这个问题:

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);
                    }