MongoDb c#错误的未知运算符异常

MongoDb c#错误的未知运算符异常,c#,mongodb,mongodb-.net-driver,C#,Mongodb,Mongodb .net Driver,我执行以下查询: { $query : { "userId" : 11851, "p2l.listId" : 38882, "isDeleted" : false }, $orderby: { email: 1}, $skip: 0, $limit:100 } 通过以下代码: BsonDocument document = BsonSerializer.Deserialize<BsonDocument>

我执行以下查询:

{
    $query : { 
        "userId" : 11851, "p2l.listId" : 38882, "isDeleted" : false 
    },       
    $orderby: { email: 1},  
    $skip: 0, 
    $limit:100 
}
通过以下代码:

BsonDocument document = BsonSerializer.Deserialize<BsonDocument>(queryString);
QueryDocument queryDoc = new QueryDocument(document);
var toReturn = collection.Find(queryDoc);
return toReturn.ToList();
BsonDocument document=BsonSerializer.Deserialize(queryString);
QueryDocument queryDoc=新QueryDocument(文档);
var toReturn=collection.Find(queryDoc);
return toReturn.ToList();
我得到以下例外情况:

[MongoDB.Driver.MongoQueryException]={“QueryFailure标志为true(响应为{\“$err\”:\“无法规范化查询:BadValue未知顶级运算符:$query\,\“code\”:17287})。”}

我使用MongoDB3.0和C#驱动程序2.0


还有其他方法执行该查询吗?我需要在sql数据库中以字符串格式保存它,所以我需要序列化/反序列化它。

这不是有效的查询。虽然您可以通过这种方式添加$orderby(但不建议这样做),但跳过和限制不是文档的一部分。最好的做法是不要试图以这种方式构建它,而是让驱动程序为您构建它。这也将使您的应用程序在服务器更改查询的发出方式()时成为未来的证据

显然,如果其中一些是有条件的,您也需要处理它


最后一点,如果queryString实际上是一个queryString,我想您会发现它非常有问题。正确使用索引是不可能的,因为你的“用户”可以做任何他们想做的事情。另外,您还要求他们理解MongoDB查询语言。最好是对允许他们显式执行的操作进行建模。

可能是因为您的查询字符串包含未替换的引号?我已将\“替换为“”,但没有帮助。非常感谢!这对我很有帮助。
BsonDocument document = BsonDocument.Parse(queryString);
QueryDocument queryDoc = new QueryDocument((BsonDocument)document["$query"]);

return collection.Find(queryDoc)
    .SetSkip((int)document["$skip"])
    .SetLimit((int)document["$limit"))
    .SetSort(new SortDocument((BsonDocument)document["$orderby"]))
    .ToList();