我使用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来完成。
答案 0 :(得分:0)
在第一段代码中使用限制对游标对象执行限制,该游标对象仍在服务器端,直到您通过调用ToList()实际请求文档为止。此时,只有200个文档将通过网络传送到您的应用程序。
AsQueryable似乎正在执行一个聚合管道,该管道将显示在currentOp中,但两者本质上是相同的。
我不确定这两者是否会对性能产生影响