Mongodb查询带有链接ID的文档

时间:2012-12-11 08:51:06

标签: mongodb pymongo

我有一个文档,其中包含嵌入其中的不同集合中的另一个文档的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' }

2 个答案:

答案 0 :(得分:0)

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

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

更新

答案 1 :(得分:0)

你基本上做了Mongo不支持的东西,实际上比分别使用这两个记录更痛苦。

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

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

你有它,你分别有两个记录。您不能链接为@slownage显示并获得合并结果,或任何结果因为MongoDB,来自一个qauery,实际上将返回字典而不是字段的值,即使您只指定一个要返回的字段。

所以这真的是唯一的解决方案,分别将两者分开,然后对它们进行处理。

修改

你可以在这里使用DBRef但它与这样做完全相同,唯一的区别是它是一个帮助器,将它放入你自己的模型而不是你自己做。