采集:
[
{ _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
++代码实现,基本上都将这些处理完毕,因此它确实非常快。
这就是将您期望的逻辑“转换”为聚合框架可以处理的逻辑。其实有“逻辑”运营商,如
$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
它充当“三元”,以便提供与true/false
评估结果不同的结果。
我需要汇总以下记录中的所有标记: https://gist.github.com/sbassi/5642925 (这个片段中有2个样本记录)并按大小对它们进行排序(首先是出现频率更高的标记)。但是我不想考虑具有特定“user_id”的数据(比方说,2,3,6和12)。 以下是我的尝试(只是聚合,没有过滤和排序): db。用户库。聚合({$unwind:“$annotations.data.tags
我使用Nodejs和MongoDB与expressjs和mongoose库,创建一个具有用户、文章和评论模式的博客API。下面是我使用的模式。
我正在尝试使用id字段在我的碎片集合中查找重复项,这是这种模式- 我使用了下面的查询,但收到了“异常:超出$group的内存限制,但不允许外部排序。通过allowDiskUse:true选择加入。”错误,尽管我在查询中使用了“allowDiskUse:true”。 有没有其他方法可以得到我想要的,或者我应该在上面的查询中传递其他东西?谢谢。
我需要筛选此查询,以便不显示值为的文档。当前,我的代码显示以下结果: 我需要一些过滤器,使消失,以便它显示我作为第一个值:。 我以前执行过以下操作:
第一个名为的文档包含以下文档(不包括): 第二个集合名为,具有以下文档: 上的 预期的结果是: 如何使用聚合查询来实现这一点?
聚合功能让你可以汇总或更改数据的粒度。 点击字段框中的向下箭头。 选择“聚合”,然后选择一个聚合函数。 函数 描述 数字 总计 返回所有值的总和。Null 值将被忽略。 平均 返回所有值的平均值。Null 值将被忽略。 计数 返回项目数量。Null 值不计算在内。 计数(非重复) 返回不同项目的数量。Null 值不计算在内。 最小 返回所有记录的最小值。Null 值将被忽略。 最大 返回所有记录的