gpt4 book ai didi

node.js - 在mongodb的聚合中调用函数?

转载 作者:太空宇宙 更新时间:2023-11-03 22:42:42 25 4
gpt4 key购买 nike

集合:

[
{ _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 个 bool 标志。如果用户获得此文档,我想转换标志并赋予它们含义(对于用户)。例如。考虑一个文档代表一个轮胎。

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“运算符”定义到 native C++ 代码实现的处理过程,因此速度非常快。

这归结为将您预期的逻辑“转换”为聚合框架可以处理的逻辑。事实上有“逻辑”运算符,例如 $or$and在这种情况下工作:

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"
]
}
}}
])

因此没有外部函数,只需使用聚合框架提供的运算符来实现逻辑即可。除了基本的逻辑实现之外,还有 $not “逆转”逻辑和 $cond它充当 "ternary"为了提供与true/false评估不同的结果。

关于node.js - 在mongodb的聚合中调用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25865788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com