指定要返回的文档
Overview
在本指南中,您可以学习;了解如何通过将以下方法链接到 Find()
方法来指定从读取操作中返回哪些文档:
样本数据
本指南中的示例使用Atlas示例数据集的sample_restaurants
数据库中的restaurants
集合。 要学习;了解如何创建免费的MongoDB Atlas 群集并加载示例数据集,请参阅Atlas入门指南。
本页上的示例使用以下 Restaurant
类作为集合中文档的模型:
[ ]public class Restaurant { public ObjectId Id { get; set; } [ ] public string Name { get; set; } [ ] public string Cuisine { get; set; } }
Limit
要指定读取操作返回的最大文档数,请使用 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
提示
前面的示例根据文档在数据库中的自然顺序返回查询匹配的前五个文档。 以下部分介绍如何按指定顺序返回文档。
Sort
要按指定顺序返回文档,请使用 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 文档
要进一步了解本指南所讨论的任何方法或类型,请参阅以下 API 文档: