2014-05-19 1 views
0

mongo 데이터베이스 작업을 위해 Nodejs 기반 mongoskin 드라이버를 사용하고 있습니다. 그러나 일부 필드를 업데이트하고 싶지는 않지만 내 문서를 업데이트하고 싶습니다. 다음은 자세한 내용입니다. 추가에 대한mongo 업데이트 작업에서 일부 필드를 무시하도록 쿼리를 업데이트합니다.

요청 : 업데이트

{ 
    "name": "Theme Name", 
    "description": "Theme Description", 
    "createdByUserId": "53651221b25521601a5c9530",  
} 

요청 :

{ 
    "_id":"53555ef203dabf282b750a81" 
    "name": "Theme Name", 
    "categoryId": "53555ef203dabf282b750a81", 
    "description": "Theme Description", 
    "createdByUserId": "53651221b25521601a5c9530", 
    "updatedByUserId": "5675561b25521601a5c9530", 
    "dateCreated": ISODate("2014-05-19T19:47:26.603Z"), 
    "dateUpdated": ISODate("2014-05-19T19:49:28.203Z"), 
} 

나는 클라이언트에 의해 보내 필드 다음 무시해야합니다. 1. createdByUserId 2. dateCreated

시간 나는 업데이트 작업에 다음과 같은 접근 방식을 복용하고있는 경우 : 1. 읽기 수집 데이터베이스에서 두 개의 필드 위의이를 읽고 요청을 업데이트 한 다음 데이터베이스를 수행 2 _ID 제공을 위해 업데이트 작업

깨끗한 접근 방법을 찾으십시오.

답변

1

귀하의 업데이트 요청은 실제로 문서의 모든 내용을 요청에 제공된 값으로 대체합니다 (물론 "_id"는 제외). 당신이 원하는 것은 mongosphere에서 "partial update"이라고 불리는 것입니다. $set operator을 살펴보십시오. [| D의] 및 특정 필드를 생략로 말해 나는 몽고의에 완전한 문서를 보내는 방법은 지금이 아는 한 지금까지

db.yourcollection.update({"_id":"53555ef203dabf282b750a81"}, 
    {$set: 
    { 
     "categoryId":"53555ef203dabf282b750a81", 
     "updatedByUserId":"5675561b25521601a5c9530", 
     "dateUpdated":ISODate("2014-05-19T19:49:28.203Z") 
    } 
    } 
) 

: 그래서 당신이해야 할 것은 같은입니다.

+0

감사합니다. 래퍼 메서드를 만들어서 문서의 각 필드를 반복하고 제안한대로 쿼리를 만들려고합니다. 바라기를 이것은 잘 될 것이다. – joy

+0

이것이 지원되지 않는다는 사실을 잘 알고 있습니다. :-) – joy

+0

이렇게하면 안됩니다. 업데이트 할 필드가 무엇인지 알기 때문에'$ set'을 사용하면 좋을 것입니다. –