首页 文章

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

提问于
浏览
1

我需要在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 回答

  • 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 有两个参数,第一个是要测试的字段,它返回的位置存在或不为空,第二个是在条件不是 true 的情况下返回的备用值 .

相关问题