MongoDb c# 错误的未知运算符异常
MongoDb c# bad unknown operator exception
我执行以下查询:
{
$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();
我得到以下异常:
[MongoDB.Driver.MongoQueryException] = {"QueryFailure flag was true (response was { \"$err\" : \"Can't canonicalize query: BadValue unknown top level operator: $query\", \"code\" : 17287 })."}
我使用 MongoDb 3.0 和 C# 驱动程序 2.0。
还有其他方法可以执行该查询吗?我需要在 sql 数据库中以字符串格式保存它,所以我需要 serialize/deserialize 它。
这不是一个有效的查询。虽然您可以通过这种方式添加 $orderby(但不推荐这样做),但 skip 和 limit 不是文档的一部分。最好的办法是不要尝试以这种方式构建它,而是让驱动程序为您构建它。这也将使您的应用程序在未来证明服务器何时更改查询的发出方式 (https://jira.mongodb.org/browse/SERVER-15176)。
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();
显然,如果其中一些是有条件的,您也需要处理它。
最后一点,如果 queryString 实际上是一个 queryString,我认为您会发现它非常有问题。正确使用索引是不可能的,因为你的 "users" 可以做任何他们想做的事情。另外,您要求他们了解 MongoDB 查询语言。明确允许他们做什么会更好。
我执行以下查询:
{
$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();
我得到以下异常:
[MongoDB.Driver.MongoQueryException] = {"QueryFailure flag was true (response was { \"$err\" : \"Can't canonicalize query: BadValue unknown top level operator: $query\", \"code\" : 17287 })."}
我使用 MongoDb 3.0 和 C# 驱动程序 2.0。
还有其他方法可以执行该查询吗?我需要在 sql 数据库中以字符串格式保存它,所以我需要 serialize/deserialize 它。
这不是一个有效的查询。虽然您可以通过这种方式添加 $orderby(但不推荐这样做),但 skip 和 limit 不是文档的一部分。最好的办法是不要尝试以这种方式构建它,而是让驱动程序为您构建它。这也将使您的应用程序在未来证明服务器何时更改查询的发出方式 (https://jira.mongodb.org/browse/SERVER-15176)。
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();
显然,如果其中一些是有条件的,您也需要处理它。
最后一点,如果 queryString 实际上是一个 queryString,我认为您会发现它非常有问题。正确使用索引是不可能的,因为你的 "users" 可以做任何他们想做的事情。另外,您要求他们了解 MongoDB 查询语言。明确允许他们做什么会更好。