文件我有以下模式:查詢針對具有依賴元素另一個集合
Collection1
name
slug
Collection2
name
slugCollection1
「鏈接」 Collection1
和Collection2
之間是穿過田野slug
和slugCollection1
。
我想創建一個查詢,該查詢返回Collection1
中的元素,並帶有一個新的計算布爾屬性,該布爾屬性指示Collection2
中是否存在(或不依賴)元素。
對於這一點,我創建了以下查詢:
[
{
"$lookup": {
"from": "Collection2",
"localField": "slug",
"foreignField": "slugCollection1",
"as": "elements"
}
},
{
"$project": {
"_id": 0,
"id": "$id",
"name": 1,
"slug": 1,
"hasElements": {
$gt: [ { $size: '$elements' }, 0 ]
}
}
}
]
我對這個性能問題時,有很多在這兩個集合,甚至下面的錯誤元素:
MongoError: Total size of documents in collection2 matching { slug: { $eq: "paymill" } } exceeds maximum document size
是還有另一種方式來實現這樣的要求?謝謝!
你需要在'collection1'所有字段?您也可以將['allowDiskUse'](https://docs.mongodb.com/manual/reference/command/aggregate/#dbcmd.aggregate)設置爲'true'來寫入臨時文件 – styvane
您是什麼意思所有字段?我不需要collection2中的所有「加入」字段,實際上只有一個能夠使用'$ size'。是否可以指定要包含在'$ lookup'級別的字段。謝謝! –
我的意思是,如果你不需要「collection1」中的所有文檔字段,那麼你可以先投影它們並丟棄這些字段。但是你可以爲「collection2」做同樣的事情。另外嘗試使用'allowDiskUse'來查看它是否有幫助。如果這不起作用,您可能需要更改文檔結構或使用兩種不同的查詢來獲得最終結果。 – styvane