【问题标题】:MongoDB.Driver.MongoCommandException: 'Command aggregate failed: '$group' is not supported.'MongoDB.Driver.MongoCommandException:'命令聚合失败:不支持'$group'。
【发布时间】:2017-07-14 20:14:55
【问题描述】:

实际上我使用 cosmos db 作为我的后端,我尝试使用 Linq 查询样式获取集合的计数。但是我收到了这个错误

MongoDB.Driver.MongoCommandException: '命令聚合失败: '$group' 不受支持。'

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();

在查询行中收到执行处理程序错误...

MongoDB.Driver.MongoCommandException: '命令聚合失败: '$group' 不受支持。'

请帮助我找出问题所在... 提前谢谢...

【问题讨论】:

  • 不是完全重复,但$group的可用性已被多次询问,包括here
  • 似乎有人在 Azure SEO 中一直很忙。过去很容易找到不支持 MongoDB 聚合函数的引用,但它们突然出现“奇怪地隐藏”。事实上,大多数搜索词都指向this "very helpful" piece of information.。就我个人而言,我不喜欢把钱交给任何有明显欺骗历史的人。
  • 底线是 CosmosDB 不是 MongoDB,尽管有任何其他声明。如果您想要 MongoDB 功能,请改用它。如果你认为你想要“Cosmos DB 服务”,那么你应该使用“它自己的原生 API”,而不是它声称“兼容”的东西。在大多数情况下,这根本不是一个真实的陈述。
  • var collection = database.GetCollection&lt;Users&gt;("users"); var result = collection.Find(_ =&gt; true).ToList(); var query = result.Count(); 这给了我我需要的确切结果...这是获得结果的好方法还是我做错了什么...

标签: mongodb azure-cosmosdb


【解决方案1】:

var collection = database.GetCollection("users"); 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());

【讨论】:

  • 有什么更新吗?你试过了吗?如果您对此主题还有其他问题,请随时告诉我。
  • 真的很感谢@Amor...我使用了我在评论中提到的上述方法...因为它帮助我在计数的同时获得用户集合...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-17
  • 2013-10-03
相关资源
最近更新 更多