itsource

mongoose의 많은 부분을 업데이트합니다.

mycopycode 2023. 5. 7. 11:25
반응형

mongoose의 많은 부분을 업데이트합니다.

아주 간단한 사건이 있습니다.매일 자정마다 컬렉션을 업데이트합니다.사용중node-schedule:

schedule.scheduleJob('0 0 * * *', () => {
   Users.updateMany();
});

제가 원하는 것은 제 컬렉션에 있는 모든 문서를 반복하는 것입니다.Users) 그리고 나서 만약User.created이라false로 바꾸고 싶습니다.true.

자바스크립트에서는 다음과 같습니다.

for (let user in Users) {
   if (user.created === false) {
      user.created = true;
   }
} 

몽구스에서 하는 방법?감사합니다!

편집: 스토리는 매우 간단합니다. 몽구스를 사용하여 DB의 모든 요소에 대해 반복하고 반복된 요소에 필드 "생성" === false가 있으면 true로 변경합니다.

mongodb 방법을 사용하여 여러 문서를 업데이트할 수 있습니다.

단순 쿼리는 다음과 같습니다.

db.collection.updateMany(filter, update, options)

업데이트에 대한 자세한 내용은 여기를 참조하십시오.

요구 사항에 따라 업데이트 코드는 다음과 같습니다.

User.updateMany({"created": false}, {"$set":{"created": true}});

여기서는 $set을 사용해야 합니다. 왜냐하면 생성된 값을 true에서 false로 변경하고 싶기 때문입니다.참고로.전체 문서를 변경하려면 $set을 사용할 필요가 없습니다.

먼저 업데이트할 문서를 찾으려면 쿼리가 필요합니다.이것은 단순한 것입니다.

{"created": false}

그런 다음 mongo에게 해당 문서를 업데이트하는 방법을 알려주는 업데이트 쿼리가 필요합니다.

{"$set":{"created": true}}

다음을 사용해야 합니다.$set변경할 필드를 지정하는 연산자입니다. 그렇지 않으면 전체 문서를 덮어씁니다.마지막으로 이러한 구성 요소를 추가 매개 변수와 함께 단일 mongo 호출로 결합하여 mongo에 여러 문서를 수정할 것임을 알릴 수 있습니다.

User.update({"created": false}, {"$set":{"created": true}}, {"multi": true}, (err, writeResult) => {});

Mongoose는 MongoDB의 문서에서만 이 모든 정보를 찾을 수 있도록 Mongo API를 긴밀하게 복제하려고 합니다. https://docs.mongodb.com/manual/reference/method/db.collection.update/

언급URL : https://stackoverflow.com/questions/54992810/update-many-in-mongoose

반응형