我发现没有办法比较这两个。如果有其他选择,请告诉我。
如您所见,我有两个集合事件和eventuser,我希望基于eventuser的用户列表 事件集合中事件名称的显示。
但是我有字符串格式的userId,然后如何比较userId列 在eventuser集合中带有_id列的情况下。 活动收集
Column
Map("a"-> 1(int), "b"-> "hello"(string))
答案 0 :(得分:1)
在$ lookup $lookup中,您不能将字符串-> _id或_id->字符串与之匹配
可能的情况是_id-> _id或字符串->字符串
所以您需要像这样更改数据
{
"_id" : ObjectId("5b5867500be60f139e67c908"),
"userId" : ObjectId("5b58674e0be60f139e67cfea"),
"name" : "Add to Cart",
},
{
"_id" : ObjectId("5b5867500be60f139e67c090"),
"userId" : ObjectId("5b58674e0be60f139e67cfea"),
"name" : "Searched",
},
{
"_id" : ObjectId("5b5867500be60f139e67c098"),
"userId" : ObjectId("5b58674e0be60f139e67cacd"),
"name" : "Add to Cart",
}
否则,您需要升级MongoDB版本4,然后可以使用$ toObjectId $toObjectId
db.collection.aggregate([
{ $match: { "name": "Add to Cart" } },
{
$addFields: {
convertedId: { $toObjectId: "$userId" }
}
},
{
"$lookup": {
"from": "from_collection",
"localField": "convertedId",
"foreignField": "_id",
"as": "data"
}
}
]);