在java驱动程序聚合中使用mongo $toObjectId函数
我正在使用 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)
- 本文标签: 家庭宠物
- 本文链接: https://www.coder6.net/article/2139
- 版权声明: 本文由蚂蚁原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权
热门推荐
-
浏览(192) 评论(0)