簡體   English   中英

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標志為true(響應為{\\“ $ err \\”:\\“無法規范化查詢:BadValue未知頂級運算符:$ query \\”,\\“ code \\”: 17287})。“}

我使用MongoDb 3.0和C#驅動程序2.0。

還有其他方法可以執行該查詢嗎? 我需要將其以字符串格式保存在sql數據庫中,因此我需要對其進行序列化/反序列化。

那不是有效的查詢。 雖然可以通過這種方式添加$ order(但不建議這樣做),但是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,我認為您會發現它非常有問題。 正確使用索引將是不可能的,因為您的“用戶”絕對可以做他們想要的任何事情。 另外,您要求他們了解MongoDB查詢語言。 最好對允許他們明確執行的操作進行建模。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM