Получить и назначить несколько UID, чтобы опубликовать UID
Я строю приложение, используя golang
а также [dgraph][1]
с [dgraph client][1]
,
В то время как администратор представляет form
, у него есть некоторые tags
, Некоторые из тегов являются новыми, а некоторые из них являются старыми.
Теперь каждый раз, когда я отправляю форму, создается новый тег с точно таким же именем в dgraph graph database
,
Когда я запрашиваю, он выводит один и тот же тег с разными uid
и каждый тег со своим краем для публикации
Вместо этого, я только что понял, мне сначала нужно проверить, есть ли данный тег в моей базе данных или нет, и когда это так, мне нужно создать грань между существующими 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
}