2017-07-14 39 views
-1

其實現在用的是宇宙DB作爲我的後端我試圖讓使用LINQ查詢style.but我得到這個錯誤

MongoDB.Driver.MongoCommandException收集的計數:「命令總失敗: 」 $組'不被支持。'

using MongoDB.Driver; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

var client = new MongoClient(url); 
var database = client.GetDatabase("db"); 
var collection = database.GetCollection<Users>("users"); 
var query = collection.AsQueryable<Users>().Count(); 

我得到的execption處理程序錯誤在查詢行...

MongoDB.Driver.MongoCommandException: '命令總失敗: ',不支持' $組

請幫我找出問題... 在此先感謝...

+1

不準確* *的副本,但'$ group'可用性已經被問了好幾次,包括[這裏](https://stackoverflow.com/q/44844678/272109)。 –

+0

似乎有人在Azure SEO一直很忙。它過去非常簡單,以查找不支持MongoDB聚合函數的引用,但它們突然出現「隱藏」。實際上,大多數搜索字詞都是針對[這個「非常有用」的信息。](https://azure.microsoft.com/en-gb/updates/azure-documentdb-now-supports-aggregate-functions/ )。就我個人而言,我厭惡將錢交給有明顯欺騙歷史的人。 –

+0

儘管有任何其他聲明,但底線是CosmosDB不是MongoDB。如果你想要MongoDB的功能,那就用它來代替。如果你認爲你需要「宇宙數據庫服務」,那麼你應該使用「它自己的本地API」,而不是它聲稱與之「兼容」的東西。這在大多數情況下根本不是一個真正的說法。 –

回答

0

變種集合= database.GetCollection( 「用戶」); var result = collection.Find(_ => true).ToList(); var query = result.Count();這給我確切的結果我需要什麼...這是一種找到結果的方式或者我做錯了什麼

您不需要在計算用戶數之前調用ToList()。以下代碼將會很好。

var query = collection.Find(_ => true).Count(); 

您還可以使用SQL查詢來獲取聚合數據。以下代碼供您參考。

SELECT value count(1) FROM c 

要調用這個SQL查詢,我們可以使用DocumentDb C#SDK。我在我的MongoDb服務上測試過它,在我身邊工作得很好。

var client = new DocumentClient(new Uri("https://mymongodb.documents.azure.com"), "password"); 
SqlQuerySpec query = new SqlQuerySpec("SELECT value count(1) FROM c"); 
var collectionLink = UriFactory.CreateDocumentCollectionUri("db", "users"); 
var documentQuery = client.CreateDocumentQuery(collectionLink, query); 
var count = Convert.ToInt32(documentQuery.ToList().First()); 
+0

讓我們試試這個。然後找回結果,如果它的工作與否... – Hariharan

+0

有沒有更新?你試過了嗎?如果您有關於此主題的更多問題,請隨時通知我。 – Amor

+0

真的很感謝@Amor ...我用了上面提到的方法在評論中...因爲它幫助我獲得用戶集合同時計數也... – Hariharan