2017-07-14 41 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