Foreach
Foreach( array_or_page, lambda )
Foreach( array_or_page, lambda )
Foreach( array_or_page, lambda )
Foreach( array_or_page, lambda )
foreach( lambda, array_or_page )
Foreach( array_or_page, lambda )
Description
The Foreach
function applies the
Lambda serially to each member of an
Array or Page, and
returns the original, unmodified array.
The Foreach
function is very useful when the original array does not
need to be modified, but a side effect is required for every value in an
array. Later invocations of the Lambda can see the side effects of
earlier invocations of the Lambda.
Examples
The query below iterates over the results returned by the Paginate function, executing the Lambda for each value in the page of results. The page of results contains an array of references, and each reference’s document is updated by the Lambda.
client.Query(
Foreach(
Paginate(Match(Index("spells_by_element"), "fire")),
spell => Update(
spell,
Obj(
"data", Obj(
"spellbook", Ref(Collection("spellbooks"), "181388642139243008")
)
))));
{
"data": [
{ "@ref": "classes/spells/181388642046968320" },
{ "@ref": "classes/spells/181388642071085568" }
]
}
curl https://db.fauna.com/ \
-u fnAChGwBcAACAO70ziE0cfROosNJHdgBmJU1PgpL: \
-d '{
"foreach": {
"lambda": "spell",
"expr": {
"update": { "var": "spell" },
"params": {
"object": {
"data": {
"object": {
"spellbook": { "@ref": "classes/spellbooks/181388642139243008" }
}
}
}
}
}
},
"class": {
"paginate": {
"match": { "index": "spells_by_element" },
"terms": "fire"
}
}
}'
HTTP/1.1 200 OK
{
"resource": {
"data": [
{ "@ref": "classes/spells/181388642046968320" },
{ "@ref": "classes/spells/181388642071085568" }
]
}
}
result, _ := client.Query(
f.Foreach(
f.Paginate(
f.MatchTerm(f.Index("spells_by_element"), "fire"),
),
f.Lambda(
"spell",
f.Update(
f.Var("spell"),
f.Obj{
"data": f.Obj{
"spellbook": f.RefCollection(f.Collection("spellbooks"), "181388642139243008"),
},
},
),
),
),
)
fmt.Println(result)
map[data:[{181388642046968320 0xc4201c3720 <nil>} {181388642071085568 0xc4201c3940 <nil>}]]
System.out.println(
client.query(
Foreach(
Paginate(
Match(Index(Value("spells_by_element")), Value("fire"))
),
Lambda(
Value("spell"),
Update(
Var("spell"),
Obj("data",
Obj("spellbook",
Ref(Collection(Value("spellbooks")),Value(181388642139243008L)))
)
)
)
)
).get()
);
{
data: [
ref(id = "181388642046968320", collection = ref(id = "spells", collection = ref(id = "collections"))),
ref(id = "181388642071085568", collection = ref(id = "spells", collection = ref(id = "collections")))
]
}
client.query(
q.Foreach(
q.Paginate(
q.Match(q.Index('spells_by_element'), 'fire')
),
q.Lambda(
'spell',
q.Update(
q.Var('spell'),
{
data: {
spellbook: q.Ref(
q.Collection('spellbooks'),
'181388642139243008',
),
},
},
),
),
)
)
.then((ret) => console.log(ret))
{ data:
[ Ref(id=181388642046968320, collection=Ref(id=spells, collection=Ref(id=collections))),
Ref(id=181388642071085568, collection=Ref(id=spells, collection=Ref(id=collections))) ] }
client.query(
q.foreach(
lambda spell: q.update(
spell,
{
"data": {
"spellbook": q.ref(q.collection("spellbooks"), "181388642139243008")
}
}
),
q.paginate(q.match(q.index("spells_by_element"), "fire"))
))
{
"data": [
{ "@ref": "classes/spells/181388642046968320" },
{ "@ref": "classes/spells/181388642071085568" }
]
}
client.query(
Foreach(
Paginate(Match(Index("spells_by_element"), "fire")),
Lambda { spell =>
Update(
spell,
Obj(
"data" -> Obj(
"spellbook" -> Ref(Collection("spellbooks"), "181388642139243008")
)
))
}))
{
"data": [
{ "@ref": "classes/spells/181388642046968320" },
{ "@ref": "classes/spells/181388642071085568" }
]
}
Is this article helpful?
Tell Fauna how the article can be improved:
Visit Fauna's forums
or email docs@fauna.com
Thank you for your feedback!