2016-09-21 5 views
0

다음은 제 코드입니다.은 MongoDB의 하위 필드에 표현식을 추가 할 수 없습니다.

Cart 
     .aggregate() 
     .match(where) 
     .lookup({ 
      from: "product_catelogs", 
      foreignField: "_id", 
      localField: "product_id", 
      as: "product" 
     }) 
     .project({ 
      product: { 
      $arrayElemAt: ["$product", 0] 
      }, 
      "product.custom_field": { 
      $add: [1, 1] 
      }, 
      product_quantity: 1, 
      product_variant: 1, 
      guest_token: 1, 
      user_id: 1, 
      product_id: 1, 
     }) 

여기에서 제품 개체와 함께 맞춤 입력란을 추가하고 싶습니다. 내가 그렇게하려고 할 때, 나는 이런 종류의 오류에 직면하고있다

이미 모든 분야에 적용되는 표현 이 있기 때문에 제품의 서브 필드 식을 추가 할 수 없습니다

도와주세요.

+0

두 스키마에 대한 샘플 문서를 추가하십시오. – notionquest

답변

1

이 문제를 해결할 수있는 유일한 방법은 product 임베드 필드를 개별적으로 새 필드와 함께 투영하는 다른 프로젝트 파이프 라인을 추가하는 것입니다. 예는 다음과 같습니다.

Cart.aggregate() 
    .match(where) 
    .lookup({ 
     "from": "product_catelogs", 
     "foreignField": "_id", 
     "localField": "product_id", 
     "as": "product" 
    }) 
    .project({ 
     "product": { "$arrayElemAt": ["$product", 0] }, 
     "product_quantity": 1, 
     "product_variant": 1, 
     "guest_token": 1, 
     "user_id": 1, 
     "product_id": 1, 
    }) 
    .project({ 
     "product.field1": "$product.field1", // <-- change to suit your actual schema 
     "product.field2": "$product.field2", 
     "product.field3": "$product.field3", 
     "product.field4": "$product.field4", 
     "product.custom_field": { "$add": ["$product.field4", "$product.field5"] }, 
     "product_quantity": 1, 
     "product_variant": 1, 
     "guest_token": 1, 
     "user_id": 1, 
     "product_id": 1, 
    }) 
+0

예 ... 작동 중입니다. 어쨌든 이걸 제외하고는 .. 더 많은 코드 라인을 사용하고 있기 때문입니다. 나는 단지 묻고있다. 그러나 그것은 잘 작동하고 있습니다 ... !!! 고마워요. –

+1

다른 방법이 없다고 생각합니다. – chridam

관련 문제