如何在mongoDB V6中$lookup区分大小写的值localField

dy1byipe  于 2023-04-11  发布在  Go
关注(0)|答案(1)|浏览(139)

我有两个集合,需要对它执行左外连接。使用$lookup可以很好地工作,但问题是集合来自一些API,其中localField的值是小写的,而foreignField是大写的。
如何使用$lookup忽略或小写值?我尝试了一些方法,但没有机会。我找到了一个解决方案,但适用于旧版本的mongodb。如果您有任何经验,请帮助:)

db.mycollection.aggregate([
  {
    $lookup: {
      from: 'mycollection',
      localField: 'symbol',
      foreignField: 'index_id',
      as: 'foo',
    },
  },
]);
rjzwgtxy

rjzwgtxy1#

您可以在查找之前执行$addFields stage,以创建大写字段,然后在该字段上查找。这类似于$project stage,它显式指定输入文档中的所有现有字段并添加新字段。
两个虚拟的集合就像这样

db={
  "stocks": [
    {symbol: "aapl",name: "Apple Inc."},
    {symbol: "googl",name: "Alphabet Inc."},
    {symbol: "amzn",name: "Amazon.com, Inc."}
  ],
  "prices": [
    {index_id: "AAPL",price: 145.44},
    {index_id: "GOOGL",price: 2672.75},
    {index_id: "MSFT",price: 237.58}
  ]
}
db.stocks.aggregate([
  {
    $addFields: {
      symbol_upper: {
        $toUpper: "$symbol"
      }
    }
  },
  {
    $lookup: {
      from: "prices",
      localField: "symbol_upper",
      foreignField: "index_id",
      as: "foo"
    }
  }
])

playground
如果你想从输出中删除添加的字段,只需添加一个$project stage,如

{
    $project: {
      symbol_upper: 0
    }
  }

playground

相关问题