2017-12-21 4 views
1

위치 연산자를 사용하여 feathersjs 업데이트 기능으로 데이터를 업데이트하는 데 문제가 있습니다. 나는 MongoDB를 한 다음 JSON 문서가 :위치 연산자가 feathersjs 쿼리 업데이트와 함께 작동하지 않습니다.

{ 
"name" : "John Jonson", 
    "payments" : [ 
     { 
      "year" : 2016, 
      "payments" : [ 
       { 
        "comment" : "", 
        "title" : "1 payment", 
        "amount" : 100, 
        "date" : ISODate("2016-12-20T15:04:09.647Z") 
       } 
      ] 
     }, 
     { 
      "year" : 2015, 
      "payments" : [ 
       { 
        "comment" : "first payment", 
        "title" : "02/04/2015", 
        "amount" : 150, 
        "date" : ISODate("2016-12-20T15:10:04.499Z") 
       }, 
       { 
        "comment" : "second payment", 
        "title" : "05/06/2015", 
        "amount" : 150, 
        "date" : ISODate("2016-12-20T15:10:04.499Z") 
       } 
      ] 
     } 
    ] 
} 

나는 단지 거기 년이고 2015 payments.payments 배열에 푸시를 통해 업데이 트 객체를이 문서를보십시오

var data = { 
     _id: "5a16e032b7a982bc9b7bd7fe", 
     payment: { 
     "amount": 200, 
     "title": "09/02/2016", 
     "comment": "" 
     } 
    } 

app.service('payments').update({_id: data._id, "payments.year": 2015}, {$push: { "payments.$.payments": data.payment }}, { "multi": true }, (error, result) => { 
     console.log(error) 
     console.log(result) 
    }); 

I 수신 기능 이상이라고하면 다음과 같은 메시지 :

"exception: The positional operator did not find the match needed from the query. Unexpanded update: payments.$.payments" 

하지만 몽고 쉘이 문을 사용할 때, 모든 괜찮 :

db.payments.update({"_id" : ObjectId("5a16e032b7a982bc9b7bd7fe"), "payments.year": 2015}, {$push: { "payments.$.payments": {"amount":200,"title":"09/02/2016","comment":""}}}, {"multi": true}); 

* 문제가 해결되었습니다. *

var query = {_id: data._id, "payments.year": 2015} 

app.service('payments').patch(null, {$push: { "payments.$.payments": data.payment }}, { query }, (error, result) => { 
    console.log(error) 
    console.log(result) 
}); 

나는 단 하나 개의 질문이 : 나는 패치 방법을 사용합니다. 왜 위의 코드는 잘 작동하지만 아래의 코드는 제대로 작동하지 않습니까?

app.service('payments').patch(null, {$push: { "payments.$.payments": data.payment }}, {_id: data._id, "payments.year": 2015}, (error, result) => { 
    console.log(error) 
    console.log(result) 
}); 

답변

0

작업 코드의 query은 속성 값 줄임표를 사용하고 있습니다. 깃털 mongodb 어댑터 패치 메소드는 query 매개 변수를 사용하므로 다음을 시도하십시오.

app.service('payments').patch(null, {$push: { "payments.$.payments": data.payment }}, {query: { _id: data._id, "payments.year": 2015 }}, (error, result) => { 
    console.log(error) 
    console.log(result) 
}); 
+0

이것이 도움이 되었습니까 @ SeaDog? – sagannotcarl

관련 문제