- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
首先,我是 Mongo DB 的新手。一直在遵循一些指南和示例,例如 https://www.programcreek.com/java-api-examples/index.php?api=com.mongodb.client.model.Aggregates
和 http://zetcode.com/db/mongodbjava/
我得出的结论是,有两种与数据库交互的方式。一个使用 org.bson.Document,另一个使用 com.mongodb.BasicDBObject;
我已经使用 BasicDBObject 解决了我的问题,但它看起来不太干净,而且逻辑变得更加复杂。
我在这里寻找的是如何将我使用 BasicDBObjects 的内容转换为使用 Document 的内容。
下面是我使用BasicDBObjects时列表的内容
[{{"$group": {"_id": {"site": "$site", "author": "$author"}, "AggCount": {"$sum": 1}}},
{"$sort": {"AggCount": -1}},
{"$group": {"_id": "$_id.site", "aggResults": {"$push": {"author": "$_id.author", "count": {"$sum": "$AggCount"}}}}}}]
当我在集合上执行聚合函数时,我的 AggregateIterable 文档包含以下内容,这就是我想要的。我有两个按网站分组的结果,其中包含该网站每位作者的计数
Document{{_id=Dayton, aggResults=[Document{{author=jthomas, count=7}}, Document{{author=mculb, count=7}}, Document{{author=rjohn, count=4}}]}}
Document{{_id=Charleston, aggResults=[Document{{author=jree, count=9}}, Document{{author=cschm, count=6}}]}}
我相信我已经使用以下方法对文档进行了第一个分组和排序。
bsonList.add(Aggregates.group(d, Accumulators.sum("aggCount", 1)));
bsonList.add(Aggregates.sort(Sorts.ascending("aggCount")));
生成
[Stage{name='$group', id=Document{{site=$site, author=$author}}, fieldAccumulators=[BsonField{name='aggCount', value=Expression{name='$sum', expression=1}}]}, Stage{name='$sort', value={"aggCount": 1}}]
我认为我陷入困境的是插入。我目前有以下内容
for (String p : subAggFields) {
subDoc.append(p, "$_id." + p);
}
subDoc.append("count", Accumulators.sum("aggCount", 1));
bsonList.add(Aggregates.group(mainDoc, Accumulators.push("aggResults", subDoc)));
并包括上面的第一组和我的排序
[Stage{name='$group', id=Document{{site=$site, author=$author}}, fieldAccumulators=[BsonField{name='aggCount', value=Expression{name='$sum', expression=1}}]},
Stage{name='$sort', value={"aggCount": 1}},
Stage{name='$group', id=Document{{_id=$site}}, fieldAccumulators=[BsonField{name='aggResults', value=Expression{name='$push', expression=Document{{author=$_id.author, count=BsonField{name='aggCount', value=Expression{name='$sum', expression=1}}}}}}]}]
我还知道问题出在以下代码上,因为我收到 org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for class com.mongodb.client.model.BsonField 错误。
count=BsonField{name='aggCount', value=Expression{name='$sum', expression=1}}
所以总的来说,我试图弄清楚如何在推送中进行累积。
最佳答案
您可以通过以下方式执行此操作:
List<Bson> aggregates = Arrays.asList(
Aggregates.group(Document.parse("{ 'site': '$site', 'author': '$author' }"),
Accumulators.sum("AggCount", 1)),
Aggregates.sort(Sorts.descending("AggCount")),
Aggregates.group("$_id.site", Accumulators.push("aggResults", Document
.parse("{ 'author': '$_id.author', 'count': { '$sum': '$AggCount' } }"))));
关于java - Accumulators.Push 内的 Mongodb Accumulators.sum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57278574/
我只是在阅读有关 HQ9+ 编程语言的一些内容: https://esolangs.org/wiki/HQ9+ , https://en.wikipedia.org/wiki/HQ9+ , 和 htt
首先,我是 Mongo DB 的新手。一直在遵循一些指南和示例,例如 https://www.programcreek.com/java-api-examples/index.php?api=com.
当我写作时 long long sum = accumulate(a.begin(), a.end(), 0); 或者 long long sum = accumulate(a.begin(), a.
当我写作时 long long sum = accumulate(a.begin(), a.end(), 0); 或者 long long sum = accumulate(a.begin(), a.
我有一个关于 accumulate() 和运算符重载的问题。 我有一个类 Order 包含 private: Customer cust; std::vector vP; 和一个类 Purchase
我在 C++ 中使用 opencv 库,我正在尝试计算 vector difference 中包含的点的总和 Point 类具有 x 属性,即 float . float pointSumX(Poin
我试图将以下循环转换为 accumulate() 调用,但我失败了: total = 0 for h in heat_values: total += h total -= total
如果我像下面这样在 C++ 中使用 accumulate 函数 std::vector v2{1, 2, 3, 4, 5}; int sum = 0; std::cout values{ 1,
有没有办法按名称获取已注册的 Spark 累加器,而无需传递实际引用?期望的行为: val cnt1 = sc.longAccumulator("cnt1") val cnt2 = something
std::accumulate 的 C++ 引用没有提到 std::accumulate 可能抛出的任何异常,仍然它的定义不包含 noexcept。假设一个人使用不抛出的类型和操作,在声明为 noex
尝试“滥用”std::accumulate 算法(为什么它出现在“数字” header 中?;)) template std::string strjoin(Range&& range, Sepera
这让我很困惑,如果有人能帮助我,我将不胜感激。 (编辑:以为这是一个模板化问题,我误会了) 我想使用 gnu 的并行累积算法(存储在 #include 中)添加以下类的多个拷贝 类故意不做太多,我觉
错误似乎与 std::accumulate() 或迭代器有关,或者我是否访问了无效指针? int m = 0; std::vector v{4,-3,0,-5}; for(std::vector::i
此代码是从另一个用户问题复制而来的,我很好奇这里的 accumulate 是如何工作的。我从这段代码中得到了正确的结果,但想知道 lcm 在“累积”时采用什么参数。初始化为 A,范围之和为 b?请帮忙
如何统计满足 lower_bound(42), upper_bound(137) 的元素数量从这段代码?? accumulate(values.lower_bound(42), values.uppe
我在测试代码中使用 std::accumulate 得到了意想不到的结果。我正在尝试添加一个大的 double vector ,但由于某种原因,该值溢出了: #include #include #
我试着编写一个基本的编译时版本的std::accumulate()通过定义一个类模板,该模板将递归迭代给定范围并在每次迭代时添加元素。 在 Ubuntu 14.04 上使用 gcc 4.8.4 编译测
我刚刚写了一个小的辅助函数作为 std::accumulate 的包装: template inline auto accumulate(FwdIter begin, FwdIter end) ->
需要以下示例的更漂亮的解决方案,但需要使用 std::accumulate。 #include #include #include class Object { public: Obje
是否可以指示 Redis 累积一组操作,然后发出“publish all”命令来发布整组操作(按线性顺序)? 所以你会以某种方式设置一个标记(startpublish ?)并且缓存会累积从中接收到的所
我是一名优秀的程序员,十分优秀!