Docs 菜单
Docs 主页
/ / /
C#/.NET
/ / /

指定要返回的文档

在此页面上

  • Overview
  • 样本数据
  • Limit
  • Sort
  • 跳过
  • 组合限制、排序和跳过
  • 更多信息
  • API 文档

在本指南中,您可以学习;了解如何通过将以下方法链接到 Find() 方法来指定从读取操作中返回哪些文档:

  • Limit() :指定从查询中返回的最大文档数

  • Sort() :指定返回文档的排序顺序

  • Skip() :指定在返回查询结果之前要跳过的文档数

本指南中的示例使用Atlas示例数据集sample_restaurants数据库中的restaurants集合。 要学习;了解如何创建免费的MongoDB Atlas 群集并加载示例数据集,请参阅Atlas入门指南。

本页上的示例使用以下 Restaurant 类作为集合中文档的模型:

[BsonIgnoreExtraElements]
public class Restaurant {
public ObjectId Id { get; set; }
[BsonElement("name")]
public string Name { get; set; }
[BsonElement("cuisine")]
public string Cuisine { get; set; }
}

要指定读取操作返回的最大文档数,请使用 IFindFluent 接口提供的 Limit() 方法。调用 Find() 方法后,链接 Limit() 方法以修改操作的行为。

以下示例查找cuisine字段值为"Italian"的所有餐厅,并将结果限制为5文档:

var filter = Builders<Restaurant>.Filter.Eq("cuisine", "Italian");
var results = collection.Find(filter).Limit(5).ToList();
foreach (var result in results)
{
Console.WriteLine(result.Name);
}
V & T Restaurant
Mimis Restaurant & Bar
Venice Restaurant
Areo Restaurant
Tre Giovani Pizza & Pasta

提示

前面的示例根据文档在数据库中的自然顺序返回查询匹配的前五个文档。 以下部分介绍如何按指定顺序返回文档。

要按指定顺序返回文档,请使用 IFindFluent 接口提供的 Sort() 方法。调用 Find() 方法后,链接 Sort() 方法以修改操作的行为。

调用 Sort() 时,必须将排序定义作为参数传入。您可以使用 Builders<T>.Sort.Ascending() 方法构造排序定义,将值从低到高排序,或使用 Builders<T>.Sort.Ascending() 方法从高到低排序。这两种方法都将排序依据的字段名作为参数。可以链接这些方法以按多个字段对返回的文档进行排序。

以下示例返回 cuisine字段值为 "Italian" 的所有文档,并按 name字段值的升序排序:

var filter = Builders<Restaurant>.Filter.Eq("cuisine", "Italian");
var sort = Builders<Restaurant>.Sort.Ascending("name");
var results = collection.Find(filter).Sort(sort).ToList();
foreach (var result in results)
{
Console.WriteLine(result.Name);
}
(Lewis Drug Store) Locanda Vini E Olii
101 Restaurant And Bar
44 Sw Ristorante & Bar
900 Park
A Voce
...

要在返回查询结果之前跳过指定数量的文档,请使用 IFindFluent 接口提供的 Skip() 方法。调用 Find() 方法后,链接 Skip() 方法以修改操作的行为。

以下示例返回cuisine字段值为"Italian"的所有文档并跳过前10文档:

var filter = Builders<Restaurant>.Filter.Eq("cuisine", "Italian");
var results = collection.Find(filter).Skip(10).ToList();
foreach (var result in results)
{
Console.WriteLine(result.Name);
}
Trattoria Alba
Da Umberto Restaurant
La Strada Restaurant
Pasta Lovers Trattoria
Nanni Restaurant
Villa Mosconi Restaurant
Villa Berulia
Marco Polo Ristorante
Cafe Luna
Baraonda

您可以将 Limit()Sort()Skip() 方法链接到单个 Find() 方法调用。这允许您设立从读取操作返回的最大排序文档数,在返回之前跳过指定数量的文档。

以下示例返回 cuisine 值为 "Italian"5 文档。结果按 name字段值升序排序,并跳过前 10 个文档:

var filter = Builders<Restaurant>.Filter.Eq("cuisine", "Italian");
var sort = Builders<Restaurant>.Sort.Ascending("name");
var results = collection.Find(filter).Limit(10).Sort(sort).Skip(10).ToList();
foreach (var result in results)
{
Console.WriteLine(result.Name);
}
Acqua
Acqua Restaurant
Acqua Santa
Acquista Trattoria
Acquolina Catering
Adriatic Restaurant Pizzeria Bar
Adrienne'S Pizza Bar
Ai Fiori
Aita Restaurant
Al Di La

注意

调用这些方法的顺序不会更改返回的文档。 .NET/ C#驱动程序会自动对调用重新排序,以首先执行排序操作,然后执行跳过操作,然后执行限制操作。

有关检索文档的更多信息,请参阅检索数据指南。

有关指定查询的更多信息,请参阅“指定查询”指南。

要进一步了解本指南所讨论的任何方法或类型,请参阅以下 API 文档:

后退

监控数据变化