2011-12-23 5 views
1

주어진 필드에 따라 DBRef를 어떻게 만들 수 있습니까? 예를 들어 고객 표에 UID 입력란이 있으며 주문 표에이 UID 입력란이 있습니다.이 입력란은이 요청이 속한 고객을 참조하는 데 유용하며 그다지 잘 작동하지 않습니다.NoSQL, DBRefs : MongoDB

> db.customers.findOne(); 
{ 
     "_id" : ObjectId("4ef4a61a90eec3e3c748263c"), 
     "uid" : 1, 
     "name" : "Andrey", 
     "lastname" : "Knupp Vital" 
} 
> db.orders.findOne(); 
{ 
     "_id" : ObjectId("4ef4a66490eec3e3c748263d"), 
     "oid" : 1, 
     "uid" : 1, 
     "price" : "149.90" 
} 
> db.orders.remove(); 
> order = { oid : 1 , price : 149.90 , uid : new DBRef ('customers' , 1) } ; 
{ 
     "oid" : 1, 
     "price" : 149.9, 
     "uid" : { 
       "$ref" : "customers", 
       "$id" : 1 
     } 
} 
> db.orders.save (order) ; 
> order.uid.fetch(); 
null 
> order.uid 
{ "$ref" : "customers", "$id" : 1 } 
> 

답변

3

DBRef $ id 값은 항상 참조 된 문서의 _id 필드 값으로 설정되어야합니다. 당신의 예에서는 그렇게하지 않습니다. 고정 버전 :

> db.customers.findOne() 
{ 
     "_id" : ObjectId("4ef4a61a90eec3e3c748263c"), 
     "uid" : 1, 
     "name" : "Andrey", 
     "lastname" : "Knupp Vital" 
} 
> db.orders.findOne() 
{ 
     "_id" : ObjectId("4ef4a66490eec3e3c748263d"), 
     "oid" : 1, 
     "uid" : 1, 
     "price" : "149.90" 
} 
> db.orders.remove() 
> order = { oid : 1 , price : 149.90 , uid : new DBRef ('customers' , ObjectId("4ef4a61a90eec3e3c748263c")) } ; 
{ 
     "oid" : 1, 
     "price" : 149.9, 
     "uid" : { 
       "$ref" : "customers", 
       "$id" : ObjectId("4ef4a61a90eec3e3c748263c") 
     } 
} 
> db.orders.save(order) 
> order.uid.fetch() 
{ 
     "_id" : ObjectId("4ef4a61a90eec3e3c748263c"), 
     "uid" : 1, 
     "name" : "Andrey", 
     "lastname" : "Knupp Vital" 
} 
+0

더 이상 사용되지 않습니다. – arivero

+0

@arivero일지도 모릅니다. 이 답변은 거의 2 살입니다.) DBRef가 특히 유용한 실제 사용 사례는 아직 다루지 않았으므로 간단한 _id 값을 사용합니다. –

2

나는 그것을 수동으로한다. 여분의 식별자 필드가 있으면 문제가 발생할 가능성이 높습니다. 주문 문서에서 'customer_id'필드를 만들고이를 고객의 _id로 설정하십시오. 그것은 관계형 참조로 SQL 외래 키를 만드는 것과 같습니다. PHP처럼 다음과 같이하면됩니다 :

$customer = $this->mongo->db->customer->findOne(array("name" => $customer_name)); 
$customer_id = new MongoID($customer['_id']); 
$order = Array(
      'customer_id' => $customer_id, 
     ... 
     ); 

$this->mongo->db->order->insert($order);