【发布时间】:2014-02-28 23:29:00
【问题描述】:
我希望有人能够回答我在下面尝试完成的工作是否可以使用 MongoDB 聚合框架来完成。
我有一个类似于以下的用户数据结构,包含近 100 万个文档。
{
"firstName" : "John",
"lastName" : "Doe",
"state" : "NJ",
"email" : "JOHNDOE@XYZ.COM"
"source" : [
{
"type" : "SOURCE-A",
"data" : {
"info" : "abc",
"info2" : "xyz"
}
},
{
"type" : "SOURCE-B",
"data" : {
"info3" : "abc"
}
}
]
}
为了向另一个系统提供数据,我需要生成一个平面文件结构,其中包含来自先前数据集的有限信息。列需要表示:
firstname, lastname, email, is_source-a, is_source-b
我遇到困难的部分是尝试填充“is_source-a”和“is_source-b”的条件代码。我尝试使用以下聚合查询,但无法弄清楚如何使其工作,因为与 $COND 一起使用的 $EQ 运算符似乎不会评估数组内的数据(总是错误的)。
db.collection.aggregate([
{
$project : {
_id : 0,
firstName : 1,
lastName: 1,
"is_source-a" : {
$cond : [
{ $eq: [ "$source.type", "source-a" ] },
1,
0
]
},
"is_source-b" : {
$cond : [
{ $eq: [ "$source.type", "source-b" ] },
1,
0
]
}
}
}
]);
我可以先 $UNWIND 数组,但后来我为每个用户文档获得了多条记录,不知道如何将它们合并回来。
在处理对象数组时,如何使用 $EQ(或其他运算符)和 $COND 有什么我遗漏的地方吗?
【问题讨论】:
标签: mongodb mongodb-query aggregation-framework