我有一个mongodb查询做管道查找和结果存储为一个新的数组下的关键字“A”,我找不到一个例子,如何添加另一个管道注入另一个查找下的关键字“B”,但使用匹配字段从第一个查找。类似于选择所有文档从集合根,添加文档从集合A,其中A.id = ROOT.id作为数组A,并添加文档从集合B,其中A.x=B.x作为数组A.B
具有所需输出的集合示例:
ROOT {"_id":1,"type":"customer","name":"anton"}
A {"_id":33, "customer":1, "type":"order","address":"azores island"}
B {"_id":"1_33_1", "type":"item","name":"golf ball"}
and want to achieve this output. the id incollection B is in the format of customerId_orderId_itemIndex, a string join
{"_id":1,"type":"customer","name":"anton",
"orders": [
{
"_id":33, "customer":1, "type":"order","address":"azores island",
"items":[{"_id":"33_1", "type":"item","name":"golf ball"}]
}
]}
字符串
1条答案
按热度按时间wlsrxk511#
集合
B
中的id的格式为customerId_orderId_itemIndex
,一个字符串连接这使得连接数据的工作变得更加复杂。与此相关的是,我并不清楚为什么要将信息存储在集合
B
中,而不是将它们嵌入到数组中。我个人强烈建议至少考虑一下,因为它可以大大简化当前和未来的开发。然而,你可以通过以下类似的方法来实现你问题中所述的目标:
字符串
在这里,我们:
1.在
ROOT
和A
之间执行(简单)$lookup
,以获取相关的orders
文档。A
和B
之间执行另一个$lookup
,以获取相关的items
文档。B
中文档的_id
字段时,我们可以使用它。使用以下示例数据:
型
输出为:
型
了解它在this playground example中的工作原理