MongoDB聚合 - 可以在组函数中使用OR运算符吗?

时间:2014-09-05 14:51:28

标签: mongodb mongodb-query aggregation-framework

我需要在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吗?

1 个答案:

答案 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} }。