Получение одного документа и части коллекции

Последнее обновление: 28.10.2022

Получение одного документа

Для получения одного документа применяются методы First()/FirstAsync(), Single()/SingleAsync(), FirstOrDefault()/FirstOrDefaultAsync(), SingleOrDefault()/SingleOrDefaultAsync(). При этом, если выборка не содержит документов, то методы First()/FirstAsync()/Single()/SingleAsync() генерируют исключение, а FirstOrDefault()/FirstOrDefaultAsync()/SingleOrDefault()/SingleOrDefaultAsync() возвращают значение по умолчанию.

Например, получим один документ

using MongoDB.Bson;
using MongoDB.Driver;

MongoClient client = new MongoClient("mongodb://localhost:27017");

var db = client.GetDatabase("test"); 
var collection = db.GetCollection<BsonDocument>("users");

// получаем первый документ
var user = await collection.Find("{}").FirstAsync();
Console.WriteLine(user33);

// получаем первый документ, у которого Age = 33
var user33 = await collection.Find(new BsonDocument("Age",33)).FirstAsync();
Console.WriteLine(user33);

Skip

Метод Skip() пропускает при выборке определенное количество документов. Например, пропустим 3 первых документа:

using MongoDB.Bson;
using MongoDB.Driver;

MongoClient client = new MongoClient("mongodb://localhost:27017");

var db = client.GetDatabase("test"); 
var collection = db.GetCollection<BsonDocument>("users");

// пропускаем 3 первых документа
var users = await collection.Find("{}").Skip(3).ToListAsync();
foreach (var user in users) Console.WriteLine(user);

Limit

метод Limit() устанавливает максимальное количество документов, которое можно получить. Например, получим первые три документа:

using MongoDB.Bson;
using MongoDB.Driver;

MongoClient client = new MongoClient("mongodb://localhost:27017");

var db = client.GetDatabase("test"); 
var collection = db.GetCollection<BsonDocument>("users");

// выбираем 3 первых документа
var users = await collection.Find("{}").Limit(3).ToListAsync();
foreach (var user in users) Console.WriteLine(user);

Если необходимо извлечь документы с конца коллекции, то перед извлечением можно провести сортировку:

var users = await collection.Find("{}")
    .Sort("{_id:-1}")    // сортировка по убыванию по полю _id
    .Limit(3)       // извлекаем последние 3 документа
    .ToListAsync();

Постраничная навигация

Комбинация методов Skip() и Limit() позволяет извлечь определенную часть коллекции. Например, получим с 3-го по 5 документы:

var users = await collection.Find("{}")
    .Skip(2)        // пропускаем 2 документа
    .Limit(3)       // извлекаем следующие 3 документа
    .ToListAsync();
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850