文件我有以下模式:查询针对具有依赖元素另一个集合
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