Foreach
Foreach( array, lambda )
Foreach( array, lambda )
Foreach( array, lambda )
Foreach( array, lambda )
foreach( lambda, array )
foreach array, lambda
Foreach( array, lambda )
Foreach( array, lambda )
Description
The Foreach
function applies the
Lambda serially to each member of an
array, and returns the original 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 result array. The result array contains an array of references, each reference’s document is updated by the lambda.
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"
}
}
}'
client.Query(
Foreach(
Paginate(Match(Index("spells_by_element"), "fire")),
spell => Update(
spell,
Obj(
"data", Obj(
"spellbook", Ref(Collection("spellbooks"), "181388642139243008")
)
))));
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()
);
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)
client.query(
Foreach(
Paginate(Match(Index("spells_by_element"), "fire")),
Lambda { spell =>
Update(
spell,
Obj(
"data" -> Obj(
"spellbook" -> Ref(Collection("spellbooks"), "181388642139243008")
)
))
}))
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"))
))
$client.query do
foreach paginate(match(index('spells_by_element'), 'fire')) do |spell|
update(spell,
data: { spellbook: ref(collection('spellbooks'), '181388642139243008') })
end
end
client.query(
Foreach(
collection: Paginate(
Match(
index: Index("spells_by_element"),
terms: "fire"
)
),
in: { spell in
Update(
ref: spell,
to: Obj(
"data" => Obj(
"spellbook" => Ref(Collection("spellbooks"), "181388642139243008")
)
)
)
}
)
)
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));
HTTP/1.1 200 OK
{
"resource": {
"data": [
{ "@ref": "classes/spells/181388642046968320" },
{ "@ref": "classes/spells/181388642071085568" }
]
}
}
{
"data": [
{ "@ref": "classes/spells/181388642046968320" },
{ "@ref": "classes/spells/181388642071085568" }
]
}
{
data: [
ref(id = "181388642046968320", collection = ref(id = "spells", collection = ref(id = "collections"))),
ref(id = "181388642071085568", collection = ref(id = "spells", collection = ref(id = "collections")))
]
}
map[data:[{181388642046968320 0xc4201c3720 <nil>} {181388642071085568 0xc4201c3940 <nil>}]]
{
"data": [
{ "@ref": "classes/spells/181388642046968320" },
{ "@ref": "classes/spells/181388642071085568" }
]
}
{
"data": [
{ "@ref": "classes/spells/181388642046968320" },
{ "@ref": "classes/spells/181388642071085568" }
]
}
{
"data": [
{ "@ref": "classes/spells/181388642046968320" },
{ "@ref": "classes/spells/181388642071085568" }
]
}
{
"data": [
{ "@ref": "classes/spells/181388642046968320" },
{ "@ref": "classes/spells/181388642071085568" }
]
}
{ data:
[ Ref(id=181388642046968320, collection=Ref(id=spells, collection=Ref(id=collections))),
Ref(id=181388642071085568, collection=Ref(id=spells, collection=Ref(id=collections))) ] }
Was this article helpful?
We're sorry to hear that.
Tell us how we can improve!
documentation@fauna.com
Thank you for your feedback!