Получить и назначить несколько UID, чтобы опубликовать UID

Я строю приложение, используя golang а также [dgraph][1] с [dgraph client][1],

В то время как администратор представляет form, у него есть некоторые tags, Некоторые из тегов являются новыми, а некоторые из них являются старыми.

Теперь каждый раз, когда я отправляю форму, создается новый тег с точно таким же именем в dgraph graph database,

Когда я запрашиваю, он выводит один и тот же тег с разными uid и каждый тег со своим краем для публикации

URL скриншота графика

Вместо этого, я только что понял, мне сначала нужно проверить, есть ли данный тег в моей базе данных или нет, и когда это так, мне нужно создать грань между существующими tag uid в post uid

Теперь проблема в том, что администратор может отправлять 5-10-20-40 тегов для каждого нового сообщения и при наличии 40 теги, как я могу получить UID каждого тега в 1 query и назначить на должность.

Мой код:-

type Post struct {
    CreationDate     *time.Time
    PostType         string
    ParentID         string
    AcceptedAnswerID string
    Score            int
    ViewCount        int
    Body             string
    Title            string
    LastEditorUserID string
    LastEditDate     *time.Time
    LastActivityDate *time.Time
    OwnerUserID      string
    Tags             []Tag
}

type Tag struct {
    TagName string
}

func main() {
  ...
       words := []strings{"life", "cool", "awesome", "wow"}
       tagsList := []Tag{}
       for _, word := range words {
            tagsList = append(tagsList, Tag{TagName: word})
       }
       p := Post{
            CreationDate: &cdate,
            PostType:     "question",
            Score:        0,
            ViewCount:    0,
            Body:         ask.Content,
            Title:        ask.Title,
            OwnerUserID:  user.uid,
            Tags:         tagsList,
       }
       crx := ctx.Request().Context()
       mu := &api.Mutation{
           CommitNow: true,
       }
       pb, err := json.Marshal(p)
       check(err)
       mu.SetJson = pb
       assigned, err := dg.NewTxn().Mutate(crx, mu)
       check(err)
       variables := map[string]string{"$id": assigned.Uids["blank-0"]}
       q := `query Me($id: string) {
              me(func: uid($id)) {
                    uid
                Title
                OwnerUserID
                ViewCont
                    Score
                Tags {
                  TagName
                }
              }
            }`
       resp, err := dg.NewTxn().QueryWithVars(crx, q, variables)
       check(err)
       type Root struct {
          uid         string
          Title       string
          OwnerUserID string
          ViewCount   int
          Score       int
          Tags        []Tag
       }
       var r Root
       err = json.Unmarshal(resp.Json, &r)
       check(err)
       ctx.WriteString(string(resp.Json))
  ...
}

Я просто не уверен, как я могу запросить несколько tag в 1 запрос и получить UID каждого уже доступного тега

Мой текущий TagName предикат имеетstring @index(exact) @count" тип

ОБНОВИТЬ:

Хорошо, я нашел половину решения. Я изменил TagName предикат "строка @index(термин)"

и теперь, поиск и выборка UID на основе запроса ниже:-

{
  me(func: anyofterms(TagName, "life cool awesome")) {
    uid
    TagName
  }
}

Я застрял на том, как назначить TagName UID для Tag из post для структуры ниже:-

   type Post struct {
        CreationDate     *time.Time
        PostType         string
        ParentID         string
        AcceptedAnswerID string
        Score            int
        ViewCount        int
        Body             string
        Title            string
        LastEditorUserID string
        LastEditDate     *time.Time
        LastActivityDate *time.Time
        OwnerUserID      string
        Tags             []Tag
    }

    type Tag struct {
        TagName string
    }

0 ответов

Другие вопросы по тегам