Как работает LINQ, когда он должен влиять на предыдущие вызовы в цепочке? (например, Монго / Linq2 Sql) - PullRequest
0 голосов
/ 23 марта 2020

что-то озадачило меня LINQ, когда я использовал MongoDB ...
(на самом деле, это происходит и в Linq2 Sql)

  1. myCollection.Find(obj=>true) будет выполнять запрос для возврата всех документов myCollection.

  2. myCollection.Find(obj=>true, new FindOptions(){Limit=1}), очевидно, будет выполнять запрос для возврата только одного документа из myCollection.

  3. myCollection.Find(obj=>true).First() также запустит запрос, чтобы вернуть только один документ из myCollection.

Мой вопрос относительно # 3: Какой запрос сделан на сервер?
A. .First() заставляет метод .Find() выполнить неявный запрос Limit=1 к серверу,
вернуть только один документ? (если так, как это реализовано?)

B. .Find() запросить все документы и .First() просто взять первый и выбросить остальные? Кажется расточительным.

спасибо

1 Ответ

1 голос
/ 23 марта 2020

First, предоставляемый драйвером MongoDB, является ярлыком для .Limit(1) и считывает данные с сервера как объект:

collection.Find(o => true).First();
// is equivalent to
collection.Find(o => true).Limit(1);

Запрос, отправляемый на сервер, должен быть:

db.collection.find().limit(1)

Если он не отправляет этот или подобный запрос, это будет ошибка в драйвере MongoDB, и вы можете связаться с ним и сообщить об ошибке.

...