Mongodb Mongo查询以聚合Robo3T中整个集合中的数组大小
在这里,我在mongo集合“Order”中附加了我的实际文档结构,我需要找到整个集合中LineValueKey(数组中的元素)的计数(我的意思是,我需要聚合整个集合中LineValue数组的大小),假设我的集合中有这两个文档,那么LineValueKey的计数应该返回4。为此,我试图找出mongo查询 我已经在Robo 3T 1.2.1中尝试了下面的查询,但是对于我的实际mongo文档结构,我得到了下面的错误,但是相同的查询适用于不同的mongo结构。 但我需要计算查询以计算实际mongo文档结构的LineValueKey。有人能帮忙吗Mongodb Mongo查询以聚合Robo3T中整个集合中的数组大小,mongodb,mongodb-query,robo3t,Mongodb,Mongodb Query,Robo3t,在这里,我在mongo集合“Order”中附加了我的实际文档结构,我需要找到整个集合中LineValueKey(数组中的元素)的计数(我的意思是,我需要聚合整个集合中LineValue数组的大小),假设我的集合中有这两个文档,那么LineValueKey的计数应该返回4。为此,我试图找出mongo查询 我已经在Robo 3T 1.2.1中尝试了下面的查询,但是对于我的实际mongo文档结构,我得到了下面的错误,但是相同的查询适用于不同的mongo结构。 但我需要计算查询以计算实际mongo文档结
Query: db.getCollection('Order').aggregate([{$group: { _id: null, totalSize: { $sum: { $size: "$LineValue"}}} }])
正如前面指出的,$size需要一个数组才能工作。必须将LineValue字段从对象转换为数组。 要执行此操作,请使用stage with operator
db.collection.aggregate([
{
$project: {
LineValue: {
$objectToArray: "$LineValue"
}
}
}
])
它将生成如下文档:
{
"LineValue": [
{
"k": "LineValueKey [uomCode=01]",
"v": {
"costAmt": 2.78,
"packQty": 1,
"retailAmt": 3.38,
"uomCode": "01"
}
},
{
"k": "LineValueKey [uomCode=02]",
"v": {
"costAmt": 2.78,
"packQty": 1,
"retailAmt": 3.38,
"uomCode": "02"
}
}
]
},
然后,您可以应用$group阶段,并计算阵列大小。以下是完整的汇总:
db.collection.aggregate([
{
$project: {
LineValue: {
$objectToArray: "$LineValue"
}
}
},
{
$group: {
_id: null,
totalSize: {
$sum: {
$size: "$LineValue"
}
}
}
}
])
结果将与提供的数据一致:
[
{
"_id": null,
"totalSize": 4
}
]
正如前面指出的,$size需要一个数组才能工作。必须将LineValue字段从对象转换为数组。 要执行此操作,请使用stage with operator
db.collection.aggregate([
{
$project: {
LineValue: {
$objectToArray: "$LineValue"
}
}
}
])
它将生成如下文档:
{
"LineValue": [
{
"k": "LineValueKey [uomCode=01]",
"v": {
"costAmt": 2.78,
"packQty": 1,
"retailAmt": 3.38,
"uomCode": "01"
}
},
{
"k": "LineValueKey [uomCode=02]",
"v": {
"costAmt": 2.78,
"packQty": 1,
"retailAmt": 3.38,
"uomCode": "02"
}
}
]
},
然后,您可以应用$group阶段,并计算阵列大小。以下是完整的汇总:
db.collection.aggregate([
{
$project: {
LineValue: {
$objectToArray: "$LineValue"
}
}
},
{
$group: {
_id: null,
totalSize: {
$sum: {
$size: "$LineValue"
}
}
}
}
])
结果将与提供的数据一致:
[
{
"_id": null,
"totalSize": 4
}
]
$size仅接受数组,在第二个条目中,LineValue似乎是一个objectok,在我的示例中,LineValue实际上是一个包含映射的列表。如何将其转换为数组,需要在java pojo中添加任何注释以将其序列化为数组?$size仅接受数组,在第二个条目中,LineValue似乎是一个objectok,在我的示例中,LineValue实际上是一个包含映射的列表。如何将其转换为数组,需要在JavaPOJO中添加任何注释以将其序列化为数组?非常感谢,这个查询真的很有效!!!我将进一步挖掘您的查询,以探索更多,因为我是新的Mongo。非常感谢您,这个查询真的很有效!!!我将进一步挖掘您的查询,以探索更多,因为我是新的Mongo。