mongodb 脚本
ObjectId转字符串 $toString
db.doc1.aggregate([
{
"$project": {
"doc1Id": {
"$toString": "$_id"
}
}
}
]);
字符串转ObjectId $convert
db.doc2.aggregate([
{
"$project": {
"doc1Id": {
"$convert": {
"input": {
"$cond": {
"if": {
"$eq": ["$doc1Id", '']
},
"then": null,
"else": "$doc1Id"
}
},
"to": "objectId"
}
}
}
}
])
springboot mongoTemplate
ObjectId转字符串
ConvertOperators.Convert.convertValueOf("_id").to("string")).as("cId")
字符串转ObjectId
ConvertOperators.Convert.convertValueOf("cId").to("objectId")).as("cId")
应用示例
// 假设有俩个集合doc1 doc2需要lookup聚合, 但是doc2储存的doc1的id是字符串
Aggregation agg = Aggregation.newAggregation(
Aggregation.project().and(ConvertOperators.Convert
.convertValueOf("_id").to("string")).as("doc1Id")),
Aggregation.lookup("doc2", "doc1Id", "doc1Id", "doc2")
);
mongoTemplate.aggregate(agg, "doc1", Map.class).getMappedResults();