我需要在mongodb集合上执行聚合。我遇到的问题是我需要在群组功能中进行OR操作。
我的文档有不同的值键,理想情况下它们应该相同。我坚持使用这些值,因此我无法将数据标准化。
例如,该集合为电子邮件字段提供了三个不同的字段值:
{
_id : 1,
name : "docType1",
e_mail : "joe@example.com"
}
{
_id : 2,
name : "docType2",
email : "joe@example.com"
}
{
_id : 3,
name : "docType3",
mail : "joe@example.com"
}
一旦密钥是e_mail,电子邮件或邮件,是否可以执行按电子邮件值对文档进行分组的组功能?
也许这可能与项目相结合,但到目前为止我的尝试都没有成功,我想我还需要一个OR吗?
答案 0 :(得分:3)
是的aggregation framework是可行的。您基本上需要使用$ifNull
运算符进行测试,并以嵌套形式使用第二个条件:
db.collection.aggregate([
{ "$group": {
"_id": { "$ifNull": [
"$e_mail",
{ "$ifNull": [
"$email",
{ "$ifNull": [
"$mail",
false
]}
]}
]},
"count": { "$sum": 1 }
}},
{ "$match": { "_id": { "$ne": false } } }
])
所以$ifNull
接受两个参数,第一个是测试的字段,它返回的位置存在或不为null,第二个是返回值,而不是条件{{1} }。