복붙노트

[MONGODB] MongoDB를이 - 중첩 된 배열에서 객체를 업데이트

MONGODB

MongoDB를이 - 중첩 된 배열에서 객체를 업데이트

{
  "_id": "xPBc4By8FemDwTPqH",
  "u": {
    "_id": "6PoZawHZcQz4Gwzcv",
    "username": "michael"
  },
  "friends": [
    {
      "u": {
        "_id": "eGqDjAjjtYADbuSnn",
        "username": "michael",
        "name": "michael"
      }
    },
    {
      "u": {
        "_id": "k4gKCGwYryXDMMHvs",
        "username": "joyce",
        "name": "joyce"
      }
    }
  ]
}

나는 "friends.u.username"의 이름을 업데이트하려면 : "마이클"의 이름입니다 "안녕하세요", 어떻게 그것을 할 필요가있다.

해결법

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

    1.이름 필드를 변경하려면 갱신에 $ 위치 연산자와 함께 $ 세트 연산자를 적용합니다.

    이름 필드를 변경하려면 갱신에 $ 위치 연산자와 함께 $ 세트 연산자를 적용합니다.

    $ 위치 운전자는 최종 업데이트 문이 같아야합니다, 명시 적으로 배열의 요소의 위치를 ​​지정하지 않고 갱신에 배열의 올바른 요소를 식별합니다 :

    db.collection.update(
        { "friends.u.username": "michael" }, 
        { "$set": { "friends.$.u.name": "hello" } }
    )
    
  2. ==============================

    2.당신은 $ 집합 연산자를 사용할 수 있습니다.

    당신은 $ 집합 연산자를 사용할 수 있습니다.

    > db.test.update({"friends.u._id":"eGqDjAjjtYADbuSnn"},{$set:{"friends.$.u.name":"hello"}})
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    
  3. ==============================

    3.아래의 테스트로 잘 작동합니다

    아래의 테스트로 잘 작동합니다

    먼저 어레이의 현재의 값을 확인한다.

    db.test.findOne({"friends.u.id" : "eGqDjAjjtYADbuSnn"},{"friends.u.name":1})
    

    지금 업데이트 명령을 발사

    db.test.update({"friends.u.id" : "eGqDjAjjtYADbuSnn"},{$set:{"friends.$.u.name":"hello"}})
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    

    이제 업데이트 값의 유효성을 검사 결과를 다시 확인

    db.test.findOne({"friends.u.id" : "eGqDjAjjtYADbuSnn"},{"friends.u.name":1})
    

    희망이 도움이됩니다.

  4. from https://stackoverflow.com/questions/34431435/mongodb-update-an-object-in-nested-array by cc-by-sa and MIT license