我有两个收藏夹:
Users:
{
_id:12345647890,
email:"aaa@gmail.com"
}
Documents:
{
_id:0987654321,
owner:1234567890,
text:"aaa"}
{
_id:0987654322,
owner:1234567890,
text:"bbb"}
我想用aaa@gmail.com
电子邮件查找属于个人的所有文档。
我知道我可以首先使用给定的电子邮件在_id
集合中找到某个人的Users
,然后从Documents
中查找所有文档,但是也许可以通过一种方法来实现查询,类似:
Documents.find({owner is equal _id taken from Users where Users.email is equal aaa@gmail.com})
谢谢:-)
答案 0 :(得分:2)
您可以使用$lookup
聚合管道来实现引用文档之间的联接,并将其与$match
管道组合以过滤结果。
db.Users.aggregate([
{ $match: { email: { $eq: 'searchterm' }}},
{ $lookup:
{
from: "documents",
localField: "_id",
foreignField: "owner",
as: "user_documents"
}
}
])
有关Mongodb聚合的官方文档在示例上可能很少,但是有很多workable code博客。 有关代码段和实际示例的另一个很好的资源将是您正在使用的任何驱动程序(例如c#,java等)的单元测试。
我还应该提到两个相关点:
仅运行两个查询通常是一种简单可行的选择,如果您没有大量集合,则不应自动对其进行折扣。在许多情况下,性能差异可以忽略不计。
无论选择哪种方法,请确保您正在索引外键引用!