在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 pressure

flag2 = 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

回到顶部