Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
865 views
in Technique[技术] by (71.8m points)

graph databases - How do I combine the output of two return variables into one in ArangoDB?

Beginner with ArangoDB here:

I have two outputs stored in two variables, say: a and b.
The structure of the items in variable a and b are exactly the same, but with different data. Example as follows:

a = {
    "user": "Thor Odinson",
    "city": "New York",
    "action": "Lives"
}

b = {
    "user": "Thor Odinson",
    "city": "New York",
    "action": "Childhood"
}

How would I combine the output from the two variables into one as follows?

{
    "user": "Thor Odinson",
    "city": "New York",
    "action": ["Lives", "Childhood"]
}

Ideally, combine the two documents with user and city as common denominator, and action merged into an array? Not sure if Arango has a function like that natively, but any help towards the right direction would be a great help too!
I am open to writing the logic in my code instead, but I'd like to avoid that as much as possible.

I've been playing around with COLLECT, UNION, and MERGE but with no luck.

question from:https://stackoverflow.com/questions/65914504/how-do-i-combine-the-output-of-two-return-variables-into-one-in-arangodb

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Defining data as

LET a = {
    "user": "Thor Odinson",
    "city": "New York",
    "action": "Lives"
}

LET b = {
    "user": "Thor Odinson",
    "city": "New York",
    "action": "Childhood"
}

LET data = [a,b]

To get the desired result for data, this should get you started:

FOR i IN data
    COLLECT user = i.user, city = i.city INTO groups = i.action 
    RETURN {"user": user, "city": city, "action": groups}

That gives the desired result:

[
  {
    "user": "Thor Odinson",
    "city": "New York",
    "action": [
      "Lives",
      "Childhood"
    ]
  }
]

If you need more control over the variables returned, use KEEP:

FOR i IN data
    LET action = i.action
    COLLECT user = i.user, city = i.city INTO groups KEEP action
    RETURN {"user": user, "city": city, "action": groups[*].action}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...