$posts = $collection->find();
我应该如何热切地加载每个帖子被引用的类别?
//1 Document from $posts
{
"_id": ObjectId("502803b6d4ebdfd805000032"),
"title": "abcd",
"message": "abc",
"category": {
"$ref": "categories",
"$id": ObjectId("5027e15dd4ebdfd80500001e")
}
}
//the document in categories referenced from the post above
{
"_id": ObjectId("5027e15dd4ebdfd80500001e"),
"name": "miscellaneous",
"slug": "miscellaneous",
"description": "",
"created_at": ISODate("2012-08-12T17: 01: 17.0Z"),
"updated_at": ISODate("2012-08-12T19: 27: 50.0Z")
}
答案 0 :(得分:1)
Mongo没有服务器端“急切”加载。
因此,加载相关记录迭代post cursor并手动查询相关文档。
不要担心整个“懒惰”装载的东西,对Mongo来说很好。
如果你因为各种未知情况而想要消除服务器上的压力,那么你可以在需要收集_id
数组的帖子中一直迭代,然后在一个查询中使用将这些类别退出并根据需要对其进行排序。
如果我是诚实的,DBRef不是你认为的那样,而且在Mongo中实际上很少需要。通常,与另一行相关的ObjectId
也可以。
所有DBRef确实提供了一个对象,通过该对象可以更容易,更简单地获取相关记录:http://php.net/manual/en/class.mongodbref.php,并且只有在您还不知道集合时才真正有用。可以将其视为许多相关集合的自描述ID。