【问题标题】:Mongodb querying document with linked idMongodb查询带有链接ID的文档
【发布时间】:2012-12-11 08:51:06
【问题描述】:

我有一个文档,其中嵌入了来自不同集合的另一个文档的 id。

我想要的结果是返回(我正在使用 python 和 pymongo)第一个集合的所有字段,以及嵌入文档中的所有朋友。

我知道 mongo 不做连接,我知道我需要做两个查询。我也不想复制我的数据。

我的问题是如何在 python/pymongo 中将这两个查询拼凑在一起,这样我就有一个结果,其中包含两个文档中的所有字段。

这是我的数据的样子:

db.employees

{_id: ObjectId("4d85c7039ab0fd70a117d733"), name: 'Joe Smith', title: 'junior',
manager: ObjectId("4d85c7039ab0fd70a117d730") }

db.managers

{_id: ObjectId("ObjectId("4d85c7039ab0fd70a117d730"), name: 'Jane Doe', title: 'senior manager'}

想要的结果

x = {_id: ObjectId("4d85c7039ab0fd70a117d733"), name: 'Joe Smith', title: 'junior',
    manager: 'Jane Doe' }

【问题讨论】:

    标签: mongodb pymongo


    【解决方案1】:

    你基本上做了一些 Mongo 不支持开箱即用的事情,实际上比单独使用两条记录更痛苦。

    基本上(在伪/JS代码中,因为我不是Python程序员):

    var emp = db.employees.find({ name: 'Joe Smith' });
    var mang = db.managers.find({ _id: emp._id });
    

    你有它,你有两个单独的记录。您不能像@slownage 显示的那样进行链接并获得合并结果或任何结果,因为 MongoDB 从一个 qauery 实际上会返回一个字典而不是该字段的值,即使您只指定一个要返回的字段。

    所以这确实是唯一的解决方案,将两者分开,然后处理它们。

    编辑

    您可以在此处使用 DBRef,但这与这样做几乎相同,唯一的区别是它是一个帮助器,可以将它放入您自己的模型中,而不是自己做。

    【讨论】:

      【解决方案2】:

      如果它有效,它应该是这样的:

      db.managers.find({
        '_id' => db->employees->find({ ('_id' : 1),
              ('_id': ObjectId("4d85c7039ab0fd70a117d733") }))
      })
      

      更新

      【讨论】:

      • 这不行,首先由于返回,它会为_id创建一个格式错误的值。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多