【问题标题】:Join 2 Mongo DB tables with Id and ObjectId加入 2 个带有 Id 和 ObjectId 的 Mongo DB 表
【发布时间】:2017-05-10 18:57:43
【问题描述】:

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

testScenarioId(表 1) = _id(表 2)

表一:

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

表 2:

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

}

如果我加入相同的本地字段和外国字段,但不是在上述情况下,我可以做到。

【问题讨论】:

标签: mongodb mongodb-query


【解决方案1】:

Mongodb 不支持 $lookup 中的类型强制。所以 ObjectId 类型的字段不能用字符串类型的外部字段查找。

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

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

【讨论】:

    【解决方案2】:

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

    当时你已经插入了字符串形式的id,“lookup”聚合不支持这种形式的id。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-16
      • 2018-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-12
      相关资源
      最近更新 更多