0

몽구스에서 발견 된 각 문서에 추가 속성 state: 'found'을 추가하고 싶습니다. 나는이 반환처럼 뭔가를 기대하고mongoDB에 다른 속성을 추가하는 방법 mongoose를 사용하여 문서를 찾았습니까?

router.get('/all', function(req, res, next) { 
    var allPets = []; 

    FoundPet.find({}, function(err, pets) { 
    pets = pets.map((obj) => { 
     obj.state = 'found'; 
     return obj; 
    }) 
    res.send(pets) 
    }) 
}); 

: 나는 다음과 같은 코드가

[ 
    { 
    "_id": "59c7be569a01ca347006350d", 
    "finderId": "59c79570c5362d19e4e64a64", 
    "type": "bird", 
    "color": "brown", 
    "__v": 0, 
    "timestamp": 1506291998948, 
    "gallery": [], 
    "state": "found" // the added property 
    }, 
    { 
    "_id": "59c7c1b55b25781b1c9b3fae", 
    "finderId": "59c79a579685a91498bddee5", 
    "type": "rodent", 
    "color": "brown", 
    "__v": 0, 
    "timestamp": 1506291998951, 
    "gallery": [], 
    "state": "found" // the added property 
    } 
] 

을하지만 새로운 속성이 성공적으로 위의 코드를 사용하여 추가 얻을 수없는, 어떤 솔루션이있다 그에 대한 ?

답변

3

기본적으로 Mongoose는 데이터베이스에서 반환 된 각 문서에 대해 모델을 반환하기 때문에 작동하지 않는 이유가 있습니다.

lean()을 사용해보십시오. 대신 평범한 자바 스크립트 객체를 반환합니다.

FoundPet 
    .find({}) 
    .lean() 
    .exec(function(err, pets) { 
     pets.forEach((obj) => { 
      obj.state = 'found'; 
     }); 
     res.send(pets); 
     }); 
+0

: 은 그러므로 당신은 집계 작업을 실행할 수 있습니다. – alexmac

+0

@alexmac, 예! 또한 일부 오류 처리를 수행해야하지만 OP까지입니다. –

0

한 가지 방법은 당신이 $addFields 파이프 라인을 사용하여 추가 필드를 추가 할 수있는 통합 프레임 워크를 사용하는 것입니다. 이렇게하면 문서에 새 필드를 추가 할 수 있으며 파이프 라인은 입력 문서와 새로 추가 된 필드의 기존 필드를 모두 포함하는 문서를 출력합니다. 당신은 배열 번호 대신`배열 #의 forEach`을 사용, 여기지도``를 사용하지 않아도

router.get('/all', function(req, res, next) {  
    FoundPet.aggregate([ 
     { 
      "$addFields": { 
       "state": { "$literal": "found" } 
      } 
     } 
    ]).exec((err, pets) => { 
     if (err) throw err; 
     res.send(pets); 
    }); 
}); 
관련 문제