查询以检索文档中涉及的所有行

时间:2016-08-29 16:06:34

标签: mongodb

我有一个带文档和行的结构。一行引用了它的文档。但是有些行也可以引用另一行。

我想进行查询以检索文档中涉及的所有行(意味着直接链接的行和引用的行)。

实施例

{_id:1, doc:1 },
{_id:3, doc:1, linkedLine:4},
{_id:4, doc:2 },
{_id:5, doc:2 },

我想获得

linesOfDoc(1) = {_id:1, doc:1},{_id:3, doc:1, linkedLine:4},{_id:4, doc:2 }

我可以通过doc = 1获得第一行,执行循环并获取链接行(如果存在)。

但是可以在一个mongodb查询中执行此操作吗?

此致

1 个答案:

答案 0 :(得分:2)

你不能像使用sql那样使用mongo进行连接,但是你可以使用aggregation pipeline来接近。

您在一个查询中获得了所有数据,但您需要将其展平得更远,以获得您指定的确切结果。

MONGO> db.playground.find()
{ "_id" : 1, "doc" : 1 }
{ "_id" : 3, "doc" : 1, "linkedLine" : 4 }
{ "_id" : 4, "doc" : 2 }

MONGO> db.playground.aggregate([{ $lookup: { from: "playground", localField: "linkedLine", foreignField: "_id", as: "embeddedLinkedLine"}}, { $match: { doc: <id of the document youre looking for> }}])
{ "_id" : 1, "doc" : 1, "embeddedLinkedLine" : [ ] }
{ "_id" : 3, "doc" : 1, "linkedLine" : 4, "embeddedLinkedLine" : [ { "_id" : 4, "doc" : 2 } ] }