Well, if the answer is to update the predicate itself and move the value to the new one, you can use Bulk Upsert. But it is on master and will be in next RC (this week I think). Also, you have to be careful with Bulk Upsert. Cuz it’s too powerful. If you have billions of billions of data it can block things. So I recommend do it by parts. You can limit it by paggination and adding a filter like e.g:
@filter(NOT has(TheNewPredicate) )
.
Schema and dataset sample
<age>: int .
<email>: string @index(exact, trigram) .
<otherpredicate>: string .
<test>: string .
{
set {
_:blank1 <email> "test1@dgraph.io" .
_:blank1 <age> "28" .
_:blank1 <test> "This is my test1" .
_:blank2 <email> "test2@dgraph.io" .
_:blank2 <age> "30" .
_:blank2 <test> "This is my test2" .
_:blank3 <email> "test3@dgraph.io" .
_:blank3 <age> "44" .
_:blank3 <test> "This is my test3" .
_:blank4 <email> "test4@dgraph.io" .
_:blank4 <age> "21" .
_:blank4 <test> "This is my test4" .
}
}
Query
{
q(func: regexp(email, /.*@dgraph.io$/)) {
email
age
test
<test>
}
}
Result
{
"data": {
"q": [
{
"email": "test1@dgraph.io",
"age": 28,
"test": "This is my test1"
},
{
"email": "test2@dgraph.io",
"age": 30,
"test": "This is my test2"
},
{
"email": "test3@dgraph.io",
"age": 44,
"test": "This is my test3"
},
{
"email": "test4@dgraph.io",
"age": 21,
"test": "This is my test4"
}
]
}
}
The Bulk Upsert
upsert {
query {
v as var(func: regexp(email, /.*@dgraph.io$/)) {
getValues as test
}
}
mutation {
# We copy the values from the old predicate
set {
uid(v) <otherpredicate> val(getValues) .
}
# Now we delete the old predicate
delete {
uid(v) <test> * .
}
}
}
The query
{
q(func: regexp(email, /.*@dgraph.io$/)){
email
age
test
<otherpredicate>
}
}
Result
{
"data": {
"q": [
{
"email": "test1@dgraph.io",
"age": 28,
"otherpredicate": "This is my test1"
},
{
"email": "test2@dgraph.io",
"age": 30,
"otherpredicate": "This is my test2"
},
{
"email": "test3@dgraph.io",
"age": 44,
"otherpredicate": "This is my test3"
},
{
"email": "test4@dgraph.io",
"age": 21,
"otherpredicate": "This is my test4"
}
]
}
}