2013-12-16 3 views
0

나는 http://docs.mongodb.org/ecosystem/use-cases/category-hierarchy/을 다루려고하는 PHP 개발자이지만 파이썬에 대해서는 많이 모른다. MongoDb 카테고리 계층 유스 케이스에 대한 몇 가지 질문

내 첫 번째 질문 :

for cat in db.categories.find(
{'ancestors._id': bop_id}, 
{'parent_id': 1}): 
build_ancestors_full(cat['_id'], cat['parent_id']) 

'PARENT_ID이'에서 오는가? 그것은 단지 '부모'가 아닌가요?

내 두 번째 질문 :

parent_id = parent.pop('parent') 
ancestors.append(parent) 

감사합니다 :

def build_ancestors_full(_id, parent_id): 
ancestors = [] 
while parent_id is not None: 
    parent = db.categories.find_one(
     {'_id': parent_id}, 
     {'parent': 1, 'name': 1, 'slug': 1, 'ancestors':1}) 
    parent_id = parent.pop('parent') 
    ancestors.append(parent) 
db.categories.update(
    {'_id': _id}, 
    {'$set': { 'ancestors': ancestors } }) 

가 나는 사이비 설명이 도우미 함수의 (또는 PHP에 해당), 주로 다음 줄을 부탁드립니다!

UPDATE & 않음 : 실시 예 번호에

두 오류 :

첫번째 'PARENT_ID'=> '부모'이어야

번째

{ '부모이다 ': 1,'name ': 1,'slug ': 1,'ancestors ': 1})

=> ancestors 필드는 _id이어야합니다.

답변

0

{ 'parent_id': 1}은 'parent_id': 1}은 parent_id 키만 반환하고 싶다고 생각하고 있습니다. ('parent_id': true와 같이 사용할 수 있습니다.) 몽고 껍질. 이 매개 변수를 투영이라고하며, 키도 억제 할 수 있습니다. 그러나이 경우에는 발견 된 문서에서 'parent_id'키만 나에게 반환한다고 말합니다. 그러나 _id 열을 명시 적으로 표시하지 않으면 반환됩니다.

질문의 두 번째 부분 :이 코드는 찾기 쿼리에서 반환 된 값을 할당합니다.이 경우 _id가 build_ancestors_full 함수에 전달 된 parent_id와 동일한 문서가됩니다. 이 문서에는 상위 키, 이름 키, 창녀 및 조상 키가 표시됩니다. parent.pop ('parent')는 방금 설명한 문서를 보유하고있는 부모 변수의 'parent'키에서 값을 팝합니다. Ancestors는 배열이고 ancestors.append (parent)는 위에서 설명한 문서를 조상 배열에 추가합니다.

PHP의 등가 : 첫 번째 질문에서

// get all documents that contain ancestors._id = $bop_id, only return the 'parent_id' field 
$result = $db->categories->find(array('ancestors._id' => $bop_id), array('parent_id' => 1)); 

foreach ($result as $document) { 
    build_ancestors_full($document['_id'], $document['parent_id']); 
} 

- 내가 PARENT_ID의 사용이 오타 동의합니다.

2 부 PHP :

function build_ancestors_full($id, $parent_id) { 
    $ancestors = array(); 
    while ($parent_id != null) { 
     $parent = $db->categories->find_one(
      array('_id' => parent_id), 
      array('parent' => 1, 'name' => 1, 'slug' => 1, 'ancestors' => 1)); 
     $parent_id = $parent['parent']; 
     unset($parent['parent']); 
     // array push 
     $ancestors[] = $parent; 
    } 
    $result = $db->categories->update(
     array('_id' => _id), 
     array('$set' => array('ancestors' => $ancestors))); 
} 
+0

나는 기능 부분에 더 많은 문제에 봉착했습니다. 이 예에서는 parent_id라는 개념이 존재하지 않습니다. 이것은 오타라고 생각합니다. 또한 올바르게 이해한다면 parent.pop ('parent')는 부모를 키 이름, 슬러그 및 조상이있는 배열로 남겨 둡니다. 조상들이 여기서 키가 되는게 아닌가? – Iano

+0

예 : – Iano

+0

parent는 python 사전이므로 parent.pop ('parent')는 사전에서 상위 키를 제거하고 값을 반환합니다. – user602525