Skip to content

Commit c637248

Browse files
committed
FindManyAsync
1 parent ec908ce commit c637248

File tree

2 files changed

+45
-1
lines changed

2 files changed

+45
-1
lines changed

src/CouchDB.Driver/CouchDatabase.cs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,20 @@ public async Task<TSource> FindAsync(string docId, bool withConflicts = false)
236236
}
237237
}
238238

239+
public async Task<List<TSource>> FindManyAsync(string[] docIds)
240+
{
241+
var bulkGetResult = await NewRequest()
242+
.AppendPathSegment("_bulk_get")
243+
.PostJsonAsync(new
244+
{
245+
docs = docIds.Select(id => new { id })
246+
}).ReceiveJson<BulkGetResult<TSource>>()
247+
.SendRequestAsync()
248+
.ConfigureAwait(false);
249+
250+
return bulkGetResult.Results.SelectMany(r => r.Docs).Select(d => d.Item).ToList();
251+
}
252+
239253
#endregion
240254

241255
#region Writing
@@ -345,7 +359,7 @@ public async Task<IEnumerable<TSource>> CreateOrUpdateRangeAsync(IEnumerable<TSo
345359
.SendRequestAsync()
346360
.ConfigureAwait(false);
347361

348-
IEnumerable<(TSource Document, DocumentSaveResponse SaveResponse)> zipped =
362+
IEnumerable<(TSource Document, DocumentSaveResponse SaveResponse)> zipped =
349363
documents.Zip(response, (doc, saveResponse) => (Document: doc, SaveResponse: saveResponse));
350364

351365
foreach ((TSource document, DocumentSaveResponse saveResponse) in zipped)
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
using CouchDB.Driver.Types;
2+
using Newtonsoft.Json;
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Linq;
6+
using System.Text;
7+
using System.Threading.Tasks;
8+
9+
namespace CouchDB.Driver.DTOs
10+
{
11+
#pragma warning disable CA1812 // Avoid uninstantiated internal classes
12+
internal class BulkGetResult<TSource> where TSource : CouchDocument
13+
{
14+
[JsonProperty("results")]
15+
public List<BulkGetResultDoc<TSource>> Results { get; set; }
16+
}
17+
18+
internal class BulkGetResultDoc<TSource> where TSource : CouchDocument
19+
{
20+
[JsonProperty("docs")]
21+
public List<BulkGetResultItem<TSource>> Docs { get; set; }
22+
}
23+
24+
internal class BulkGetResultItem<TSource> where TSource : CouchDocument
25+
{
26+
[JsonProperty("ok")]
27+
public TSource Item { get; set; }
28+
}
29+
#pragma warning restore CA1812 // Avoid uninstantiated internal classes
30+
}

0 commit comments

Comments
 (0)