如果我有一组对象,每个对象具有相同的描述,但具有不同的数量。
<img src='{{ asset("IMAGE_DIRECTORY_PATH/"~ image.url)}}' />
下面,我可以使用说明对其进行分组:
{
{
"_id": "101",
"description": "DD from my employer1",
"amount": 1000.33
},
{
"_id": "102",
"description": "DD from my employer1",
"amount": 1000.34
},
{
"_id": "103",
"description": "DD from my employer1",
"amount": 1000.35
},
{
"_id": "104",
"description": "DD from employer1",
"amount": 5000.00
},
{
"_id": "105",
"description": "DD from my employer2",
"amount": 2000.33
},
{
"_id": "106",
"description": "DD from my employer2",
"amount": 2000.33
},
{
"_id": "107",
"description": "DD from my employer2",
"amount": 2000.33
}
}
是否可以在(_ ids:101,102和103加105,106,107)组中包含所有金额,即使它们的差异很小,但排除奖金金额,上面的示例是_id 104?
我不相信它可以在小组阶段完成,但有些事情可以在以后阶段完成,可以将_id 101,102和103组合在一起并排除_id 104.基本上,我想要MongoDB忽略101,102,103中的微小差异并将它们组合在一起,因为来自同一雇主的工资是。
我一直在使用 $ stdDevPop ,但无法获得稳固的公式。
我正在寻找只有_ids的简单数组输出。
{ “结果”:[ “101”, “102”, “103”, “105”, “106”, “107” ] }
答案 0 :(得分:0)
db.yourDBNameHere.aggregate( [
{ $match: { "amount" : { $lt : 5000 } } },
{ $project: { _id: 1 } },
])
只会获取每件少于5000美元的交易的ID。
答案 1 :(得分:0)
你可以通过对&#34;金额&#34;进行一些数学计算来做到这一点。将其舍入到最接近的1000并将其用作分组_id
:
db.collection.aggregate([
{ "$group": {
"_id": {
"$subtract": [
{ "$trunc": "$amount" },
{ "$mod": [
{ "$trunc": "$amount" },
1000
]}
]
},
"results": { "$push": "$_id" }
}},
{ "$redact": {
"$cond": {
"if": { "$gt": [ { "$size": "$results" }, 1 ] },
"then": "$$KEEP",
"else": "$$PRUNE"
}
}},
{ "$unwind": "$results" },
{ "$group": {
"_id": null,
"results": { "$push": "$results" }
}}
])
如果你的MongoDB早于3.2,那么你只需要使用$mod
$trunc
所做的$redact
的长格式。如果您的MongoDB早于2.6而不是$match
,那么$sort
。所以在更长的形式中,这是:
db.collection.aggregate([
{ "$group": {
"_id": {
"$subtract": [
{ "$subtract": [
"$amount",
{ "$mod": [ "$amount", 1 ] }
]},
{ "$mod": [
{ "$subtract": [
"$amount",
{ "$mod": [ "$amount", 1 ] }
]},
1000
]}
]
},
"results": { "$push": "$_id" },
"count": { "$sum": 1 }
}},
{ "$match": { "count": { "$gt": 1 } } },
{ "$unwind": "$results" },
{ "$group": {
"_id": null,
"results": { "$push": "$results" }
}}
])
无论哪种方式,输出都只是_id
值,其数量按计数多次分组到边界。
{ "_id" : null, "results" : [ "105", "106", "107", "101", "102", "103" ] }
您可以在其中添加http://stackoverflow.com/questions/40656589/firebase-query-if-child-of-child-contains-a-value,也可以在客户端代码中对结果数组进行排序。