原创

在java驱动程序聚合中使用mongo $toObjectId函数

温馨提示:
本文最后更新于 2024年04月12日,已超过 48 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

我正在使用 Mongo java 驱动程序(版本 3.12.12)聚合来加入两个 MongoDB 集合。

左侧集合具有右侧集合的 _id 字段的字符串版本。以下是一些示例文档:

左集合:

{ "foreignKey" : "5a43b24cb4eac10001dbafba"}

右集合:

{ "_id" : ObjectId("5a43b24cb4eac10001dbafba", "rightsideField": "some right side stuff")}

我需要将leftCollection.foreignKey字符串转换为,ObjectIds以便我可以在稍后$lookup阶段使用该objectId作为外键。我正在尝试使用$toObjectId mongo聚合函数来实现这个目的。

这是执行此操作的代码:

    Bson addForeignKeyObjectId = Aggregates.addFields(new Field("foreignKeyObjId", "$toObjectId:\"$foreignKey\""));

    List<BsonDocument> foo = ImmutableList.copyOf(leftCollection.aggregate(
          ImmutableList.of(
            addForeignKeyObjectId,
          )
      ))

我期待什么:

{"foreignKey":"5a43b24cb4eac10001dbafba", "foreignKeyObjId":ObjectId("5a43b24cb4eac10001dbafba")}

我得到了什么:

{"foreignKey":"5a43b24cb4eac10001dbafba"}

foreignKeyObjId请注意,未添加所需的字段。:(

但是,如果我$toObjectId用这样的文字替换表达式:

Bson addForeignKeyObjectId = Aggregates.addFields(new Field("foreignKeyObjId", "some bogus literal"));

新字段已正确添加,输出文档如下所示:

{"foreignKey":"5a43b24cb4eac10001dbafba", "foreignKeyObjId":"some bogus literal"}

因此,addFields聚合步骤看起来工作正常,但我怀疑我的表达语法不太好$toObjectId正确。谁能在这里提示我正确的动作吗?

(我真的非常希望我们不要使用_ids作为外键,使用方法一切都会变得更加困难,但没有范围来改变这种丑陋rn)

正文到此结束
热门推荐
本文目录