복붙노트

[MONGODB] 하나의 호출로 여러 MongoDB의 문서를 작성하고 업데이트

MONGODB

하나의 호출로 여러 MongoDB의 문서를 작성하고 업데이트

이제 내가 그렇게 같은 MongoDB의 수집을 가정 해 봅시다 :

[
{someId: 1, someProp: prop1, isOpen: true},
{someId: 2, someProp: prop1, isOpen: true},
{someId: 3, someProp: prop1, isOpen: true},
{someId: 4, someProp: prop1, isOpen: true},
]

나는 객체의 배열로의 호출을 만들고 싶어하지만, 이러한 개체 중 일부는 새로운 것, 일부는 기존 문서를 대체해야합니다.

그래서 이렇게 내 배열 외모를 가정 해 봅시다 :

[
{someId: 1, someProp: prop1, isOpen: true},
{someId: 2, someProp: prop1, isOpen: true},
{someId: 5, someProp: prop1, isOpen: true},
{someId: 6, someProp: prop1, isOpen: true},
]

어떻게 다음을 수행하는 MongoDB의 쿼리를 작성하려면 어떻게해야합니까.

someId 내 두 번째 배열에서 개체를 일치하는 경우, 단지 false로 ISOPEN을 변경합니다. someId는 물건을 일치하지 않는 경우 수집에 삽입.

그래서 난 내 쿼리를 실행 한 후 내가 끝낼 것입니다 :

[
{someId: 1, someProp: prop1, isOpen: false},
{someId: 2, someProp: prop1, isOpen: false},
{someId: 3, someProp: prop1, isOpen: true},
{someId: 4, someProp: prop1, isOpen: true},
{someId: 5, someProp: prop1, isOpen: true},
{someId: 6, someProp: prop1, isOpen: true},
]

그것은 foreach는 () 그냥 사용을 호출하는 것이 좋습니다 :

db.books.update(
   { item: "ZZZ135" },
   {
     item: "ZZZ135",
     stock: 5,
     tags: [ "database" ]
   },
   { upsert: true }
)

... 루프에서? 아마 아닙니다. 즉, DB를 여러 번 호출을 의미 할 것입니다. 그 일을보다 효율적인 방법이 있나요?

해결법

  1. ==============================

    1.기본적으로 당신은 upsert와 bulkWrite 작업을해야합니다

    기본적으로 당신은 upsert와 bulkWrite 작업을해야합니다

    const array = [
        {  someId: 1, someProp: prop1, isOpen: true  },
        {  someId: 2, someProp: prop1, isOpen: true  },
        {  someId: 5, someProp: prop1, isOpen: true  },
        {  someId: 6, someProp: prop1, isOpen: true  }
    ]
    
    
    Model.bulkWrite(
      array.map((data) => 
        ({
          updateOne: {
            filter: { someId: data.someId },
            update: { $set: { isOpen: false, someProp: data.someProp } },
            upsert: true
          }
        })
      )
    })
    

    당신에게 출력을 줄 것이다

    [
      {  someId: 1, someProp: prop1, isOpen: false  },
      {  someId: 2, someProp: prop1, isOpen: false  },
      {  someId: 3, someProp: prop1, isOpen: true  },
      {  someId: 4, someProp: prop1, isOpen: true  },
      {  someId: 5, someProp: prop1, isOpen: true  },
      {  someId: 6, someProp: prop1, isOpen: true  }
    ]
    
  2. from https://stackoverflow.com/questions/51882718/create-and-update-multiple-mongodb-documents-in-one-call by cc-by-sa and MIT license