在查找中比较字符串和objectId

时间:2018-07-26 09:20:46

标签: mongodb aggregation-framework

我发现没有办法比较这两个。如果有其他选择,请告诉我。

如您所见,我有两个集合事件和eventuser,我希望基于eventuser的用户列表      事件集合中事件名称的显示。

但是我有字符串格式的userId,然后如何比较userId列      在eventuser集合中带有_id列的情况下。         活动收集

Column
Map("a"-> 1(int), "b"-> "hello"(string))

1 个答案:

答案 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"
    }
}
]);