使用Id和ObjectId加入2个Mongo数据库表

时间:2017-05-10 18:57:43

标签: mongodb mongodb-query

我的场景:我需要在Mongo DB中加入以下2个表,条件是

testScenarioId(表1)= _id(表2)

表1:

{
    "_id" : ObjectId("58516a6838fdb54d744ba070"),
    "_class" : "com.TestResults",
    "testScenarioId" : "581cef861892ad1eb7d124dd",
    "runId" : 314,
    "status" : "passed"
}

表2:

{
    "_id" : ObjectId("57f41cb9319ed34079df8a2d"),
    "environment" : "STAGE",
    "component" : "platform",
    "scenarioName" : "ABC-1234",

}

如果我加入相同的本地领域和外国领域而不是上述案例,我能够做到。

2 个答案:

答案 0 :(得分:1)

Mongodb不支持$ lookup中的类型强制。因此,无法使用字符串类型的外部字段查找ObjectId类型的字段。

您需要做的是在保存testScenarioId时,您需要存储为objectId。

我尝试在聚合中使用$ type但不支持。所以目前这里无法直接在聚合管道中进行。

答案 1 :(得分:1)

如果要在2个集合中实现连接,那么您将以ObjectId形式插入“testScenarioId”。

那时,你有以字符串形式插入id和“查找”聚合不支持这种形式的Id。

ObjectId的原因:当查询从第一个表(表1)中找到Id时,它们将以ObjectId形式获取id,之后它们将id与第二个表参数“testScenarioId”进行比较,该参数以字符串形式存储,并且它们是将不匹配并查询返回空数据。