【问题标题】:Can MongoDB pipeline query projection(aggregation) be case insensitive?MongoDB管道查询投影(聚合)可以不区分大小写吗?
【发布时间】:2021-03-05 19:34:10
【问题描述】:

我想使用忽略大小写的投影执行 MongoDB 管道查询。

我有示例测试数据库、集合和文档/记录:

use test;
db.createCollection('movie');
db.movie.insert({"name" : "A", "actors": ['Actor1', 'Actor2'], 'ReleaseYear':2021});
db.movie.insert({"name" : "B", "actors": ['Actor3', 'Actor4'], 'releaseYear':2022});
db.movie.insert({"name" : "C", "actors": ['Actor5', 'Actor6'], 'releaseyear':2023});

在上面,文档的属性为ReleaseYear,但大小写不同。

使用下面的查询,我们只得到“A”电影文档:

db.movie.aggregate([{"$project":{"Lead Role" : { $arrayElemAt: [ "$actors", 0 ] }, "Release Year":"$ReleaseYear"}}]).pretty();

使用这个我们只得到'B'电影文档:

db.movie.aggregate([{"$project":{"Lead Role" : { $arrayElemAt: [ "$actors", 0 ] }, "Release Year":"$releaseYear"}}]).pretty();

如何获取忽略“ReleaseYear”属性大小写的所有相关记录?

【问题讨论】:

    标签: mongodb mongodb-query aggregation-framework


    【解决方案1】:

    字段名称区分大小写。转换并非易事,因此最好注意使用正确的字段名称。使用这个:

    db.movie.aggregate([
       { $set: { data: { $objectToArray: "$$ROOT" } } },
       {
          $set: {
             data: {
                $map: {
                   input: "$data",
                   in: {
                      $cond: {
                         if: {
                            $regexMatch: {
                               input: "$$this.k",
                               regex: "releaseYear",
                               options: "i"
                            }
                         },
                         then: { k: "releaseYear", v: "$$this.v" },
                         else: "$$this"
                      }
                   }
                }
             }
          }
       },
       { $set: { data: { $arrayToObject: "$data" } } },
       {
          $project: {
             "Lead Role": { $arrayElemAt: ["$actors", 0] },
             "Release Year": "$data.releaseYear"
          }
       }
    ]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多