Create many documents

Problem

You need to create many documents in a collection within the current database.

Solution

Use the Map function to iterate over an array, and use the Create function to create a new document for each item in the array:

try
{
    Value result = await client.Query(
        Map(
            Arr(
                Obj("material", "straw"),
                Obj("material", "sticks"),
                Obj("material", "bricks")
            ),
            Lambda(
                "data",
                Create(
                    Collection("dilapidated_huts"),
                    Obj("data", Var("data"))
                )
            )
        )
    );
    Console.WriteLine(result);
}
catch (Exception e)
{
    Console.WriteLine($"ERROR: {e.Message}");
}
Arr(ObjectV(ref: RefV(id = "329483608445157953", collection = RefV(id = "dilapidated_huts", collection = RefV(id = "collections"))),ts: LongV(1650477518490000),data: ObjectV(material: StringV(straw))), ObjectV(ref: RefV(id = "329483608446206529", collection = RefV(id = "dilapidated_huts", collection = RefV(id = "collections"))),ts: LongV(1650477518490000),data: ObjectV(material: StringV(sticks))), ObjectV(ref: RefV(id = "329483608446207553", collection = RefV(id = "dilapidated_huts", collection = RefV(id = "collections"))),ts: LongV(1650477518490000),data: ObjectV(material: StringV(bricks))))
result, err := client.Query(
	f.Map(
		f.Arr{
			f.Obj{"material": "straw"},
			f.Obj{"material": "sticks"},
			f.Obj{"material": "bricks"},
		},
		f.Lambda(
			"data",
			f.Create(
				f.Collection("dilapidated_huts"),
				f.Obj{"data": f.Var("data")},
			),
		),
	))

if err != nil {
	fmt.Fprintln(os.Stderr, err)
} else {
	fmt.Println(result)
}
[map[data:map[material:straw] ref:{329482154362798144 0xc000180570 0xc000180570 <nil>} ts:1650477518490000], map[data:map[material:sticks] ref:{329482154363846720 0xc000180570 0xc000180570 <nil>} ts:1650477518490000], map[data:map[material:bricks] ref:{329482154363847744 0xc000180570 0xc000180570 <nil>} ts:1650477518490000]]
client.query(
  q.Map(
    [
      { material: 'straw' },
      { material: 'sticks' },
      { material: 'bricks' },
    ],
    q.Lambda(
      'data',
      q.Create(
        q.Collection('dilapidated_huts'),
        { data: q.Var('data') },
      )
    )
  )
)
.then((ret) => console.log(ret))
.catch((err) => console.error(
  'Error: [%s] %s: %s',
  err.name,
  err.message,
  err.errors()[0].description,
))
[
  {
    ref: Ref(Collection("dilapidated_huts"), "329482154362798144"),
    ts: 1650477518490000,
    data: {
      material: "straw"
    }
  },
  {
    ref: Ref(Collection("dilapidated_huts"), "329482154363846720"),
    ts: 1650477518490000,
    data: {
      material: "sticks"
    }
  },
  {
    ref: Ref(Collection("dilapidated_huts"), "329482154363847744"),
    ts: 1650477518490000,
    data: {
      material: "bricks"
    }
  }
]
result = client.query(
  q.map_(
    q.lambda_(
      "data",
      q.create(
        q.collection("dilapidated_huts"),
        { "data": q.var("data") },
      ),
    ),
    [
      { "material": "straw" },
      { "material": "sticks" },
      { "material": "bricks" }
    ]
  )
)
print(result)
[{'ref': Ref(id=329483608445157953, collection=Ref(id=dilapidated_huts, collection=Ref(id=collections))), 'ts': 1650477518490000, 'data': {'material': 'straw'}}, {'ref': Ref(id=329483608446206529, collection=Ref(id=dilapidated_huts, collection=Ref(id=collections))), 'ts': 1650477518490000, 'data': {'material': 'sticks'}}, {'ref': Ref(id=329483608446207553, collection=Ref(id=dilapidated_huts, collection=Ref(id=collections))), 'ts': 1650477518490000, 'data': {'material': 'bricks'}}]
Map(
  [
    { material: 'straw' },
    { material: 'sticks' },
    { material: 'bricks' }
  ],
  Lambda(
    "data",
    Create(
      Collection("dilapidated_huts"),
      { data: Var("data") }
    )
  )
)
[
  {
    ref: Ref(Collection("dilapidated_huts"), "329482154362798144"),
    ts: 1650477518490000,
    data: {
      material: "straw"
    }
  },
  {
    ref: Ref(Collection("dilapidated_huts"), "329482154363846720"),
    ts: 1650477518490000,
    data: {
      material: "sticks"
    }
  },
  {
    ref: Ref(Collection("dilapidated_huts"), "329482154363847744"),
    ts: 1650477518490000,
    data: {
      material: "bricks"
    }
  }
]
Query metrics:
  •    bytesIn:   168

  •   bytesOut:   458

  • computeOps:     2

  •    readOps:     0

  •   writeOps:     3

  •  readBytes: 1,223

  • writeBytes: 2,289

  •  queryTime:  36ms

  •    retries:     0

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!