Mongo查询限制未在操作中显示

时间:2019-05-27 18:21:38

标签: c# mongodb mongodb-query

我使用MongoDB.Driver for .NET查询Mongo(版本3.0.11)。这是我用于查询字段并将查询限制为200个文档的代码。

const express = require("express");

/**
 * @param {express.Request & {specialParam1 : string, specialParam2 : any}} req
 * @param {express.Response} res
 * @param {express.NextFunction} next
 */
function (req, res, next) {}

我的问题是,当我检查数据库的当前操作时,操作查询字段仅显示:

  

{字段:“值”}

与下面使用“ AsQueryable”进行的查询不同:

BsonDocument bson = new BsonDocument();
bson.Add("Field", "Value");
BsonDocumentFilterDefinition<ResultClass> filter      = new BsonDocumentFilterDefinition<ResultClass>(bson);
FindOptions                               queryOptions    = new FindOptions() { BatchSize = 200 };
List<ResultClass> result = new List<ResultClass>();
result.AddRange(myCollection.Find<ResultClass>(filter, queryOptions).Limit(200).ToList());

使用“ AsQueryable”的查询操作

  

{聚合:“ CollectionName”,管道:[{$ match:{字段:   “ Value”}},{$ limit:200}],游标:{}}

为什么在使用Find的查询中看不到限制?该限制是在客户端而不是在服务器上处理的吗? 我需要在服务器端进行限制,但是我不能使用第二个查询,因为搜索的字段必须是一个字符串,而不能使用AsQueryable来完成。

1 个答案:

答案 0 :(得分:0)

在第一段代码中使用限制对游标对象执行限制,该游标对象仍在服务器端,直到您通过调用ToList()实际请求文档为止。此时,只有200个文档将通过网络传送到您的应用程序。

AsQueryable似乎正在执行一个聚合管道,该管道将显示在currentOp中,但两者本质上是相同的。

我不确定这两者是否会对性能产生影响