使用不匹配值的$ lookup的Mongo聚合对象

自由香蕉

我有一个对象任务,它用键引用另一个对象Position _p_position

任务对象如下所示:

{
  _id: "ijjn97678",
  _p_position: "Position$qwerty123",
  ...
}

位置对象如下所示:

{
  _id: "qwerty123",
  ...
}

我不知道它是Mongo还是Parse约定,但是正如人们可以看到的那样,Position$在任务的关系位置属性中添加了一个

我想将两者聚合到一个对象中,以获得类似于以下内容的结果:

{
  _id: "ijjn97678",
  _p_position: "Position$qwerty123",
  positions: [
    {
      _id: "qwerty123"
    }
  ]
}

使用:

missions.aggregate([
  {
    $lookup: {
      as: "position",
      from: "Position",
      foreignField: "_id",
      localField: "_p_position",
    },
  },
])

但我需要删除Position$_p_position"_p_position"在用于查找匹配的Position的ID之前,有什么方法可以计算PS:我只有DB的阅读权限

米克尔

您可以使用$ addFields添加另一个字段,然后将其传递到$lookup舞台。要获得跟随美元符号的部分,您需要:$ indexOfBytes$ substr运算符。另外,美元符号本身是Aggregation Framework中的特殊字符(代表字段引用),因此您需要$ literal才能将其视为常规字段

db.missions.aggregate([
    {
        $addFields: {
            value: {
                $let: {
                    vars: { index: { $indexOfBytes: [ "$_p_position", { $literal: "$" } ]  } },
                    in: { $substr: [ "$_p_position", { $add: [ "$$index", 1 ] } , { $strLenBytes: "$_p_position" } ] }
                }
            }
        }
    },
    {
        $lookup: {
            from: "Position",
            localField: "value",
            foreignField: "_id",
            as: "position" 
        }
    }
])

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

mongo db使用集合中的值进行聚合匹配

Mongo 聚合:从键值对象返回不同值的计数

使用let时,带有$ lookup的Mongo聚合不起作用

mongo 聚合 $lookup 与数组

如何使用 MongoDB 聚合 $lookup 和 $addFields 来比较字段并在匹配时返回值?

在mongo聚合中匹配两个字符串对象字段

mongodb:如何提取字段而不是使用聚合+ $ lookup + $ project获取对象

mongo 在聚合匹配前排序

聚合$ lookup对象数组

从 Mongo DB 聚合中未命名的嵌套对象数组中获取最大值的键

聚合 Mongo - 按其值之一在对象数组中排序

Mongo DB聚合管道对嵌套数组对象值进行排序

如何在MongoDB聚合使用的$ lookup内部进行匹配?

mongo 在聚合中使用 $add 聚合

MongoDB聚合$ elem在$ lookup阶段匹配

在mongo db聚合中使用$ not

使用聚合方法的mongo查询

无效的配置对象。Webpack 已使用不匹配的配置对象进行初始化

在ElasticSearch中聚合仅匹配的嵌套对象值

$ lookup在聚合中可以在mongo shell命令中正常工作,但是在尝试使用mongoose节点进行尝试时,然后获取了空数组作为响应

计算Java对象与VisualVM的堆转储的内存使用不匹配的理论方法

$ lookup数组mongo聚合中的每个元素

mongo 聚合如何选择“$graphLookup 或 $lookup”

Mongodb,使用$ lookup进行聚合查询

MongoDB 使用数组中的 _ID 聚合 $lookup

MongoDB:在 countDocuments() 中使用 $lookup 聚合

在 mongodb 中使用多个 $lookup 和聚合

Mongodb聚合匹配以使用字段值结束

无法使用mongo聚合器强制超出范围值