在mongodb的聚合内调用函数?
采集:
[ { _id: "Foo", flag1: false, flag2: true, flag3: false },
{ _id: "Bar", flag1: true, flag2: false, flag3: true }
]
我的问题是,是否可以在聚合查询中调用方法?
aggregate({ $project: {
'_id': 1,
'status' MyService.getStatus($flag1, $flag2, $flag3)
}
});
如果可能的话,它的语法是什么?结果:
[ { _id: "Foo", status: 'ok' },
{ _id: "Bar", status: 'broken' }
]
在我的实际应用程序中,每个文档有10个布尔标志。如果用户获得了此文档,我想转换这些标志并给它们一个含义(对于用户)。例如认为文件代表轮胎。
flag1 = true means tire have good pressure, false means low pressureflag2 = true means depth of tire profile is good, false means little profile
and so on
总而言之,我想说的是,如果
flag1, flag2 are true and flag3 is false
在以下情况下需要更换轮胎(破损或更换):
flag1, flag2 are false and flag3 is true
当文档返回给用户时,应删除标记。取而代之的是,我们有一个状态字段,说明轮胎是正常的还是损坏的。
回答:
外部函数不适用于聚合框架。一切都会在输入时解析为BSON,因此不允许JavaScript或其他任何内容。从BSON“运算符”定义到本机C
++代码实现,基本上都将这些处理完毕,因此它确实非常快。
这就是将您期望的逻辑“转换”为聚合框架可以处理的逻辑。其实有“逻辑”运营商,如
和
在这方面的工作:
db.collection.aggregate([ { "$project": {
"_id": 1,
"status": {
"$cond": [
{ "$or": [
// Your first set of rules requires "false" for "flag1" or
// "flag2" and "true" for "flag3"
{ "$and": [
{ "$not": [
{ "$or": [ "$flag1", "$flag2" ] },
]},
"$flag3"
]},
// Your second set of rules requires "true" for "flag1" or
// "flag2" and "false" for "flag3"
{ "$and": [
{ "$or": [ "$flag1", "$flag2" ] },
{ "$not": [ "$flag3" ] }
]},
]},
"ok",
"broken"
]
}
}}
])
因此,没有外部功能,只需使用聚合框架提供的运算符来实现逻辑。除了基本的逻辑实现外,还有
“逆向”的斜率,
它充当“三元”,以便提供与true/false
评估结果不同的结果。
以上是 在mongodb的聚合内调用函数? 的全部内容, 来源链接: utcz.com/qa/406743.html