복붙노트

[MONGODB] 오브젝트의 배열에서 갱신 값 몽구스

MONGODB

오브젝트의 배열에서 갱신 값 몽구스

객체의 값을 업데이트하는 방법이 있나요?

{
  _id: 1,
  name: 'John Smith',
  items: [{
     id: 1,
     name: 'item 1',
     value: 'one'
  },{
     id: 2,
     name: 'item 2',
     value: 'two'
  }]
}

내가 항목에 대한 이름과 값 항목을 업데이트하고 싶은 말은하자 어디 ID = 2;

나는 / 몽구스 w 다음을 시도했다 :

var update = {name: 'updated item2', value: 'two updated'};
Person.update({'items.id': 2}, {'$set':  {'items.$': update}}, function(err) { ...

이 방법에 문제는 내가 id 필드를 잃고, 따라서이 경우에는, / 업데이트 전체 개체를 설정하는 것입니다.

배열에서 특정 값을 설정하지만, 혼자 다른 값을 떠날 몽구스에 더 좋은 방법이 있나요?

나는 또한 단지 사람에 대한 조회했다 :

Person.find({...}, function(err, person) {
  person.items ..... // I might be able to search through all the items here and find item with id 2 then update the values I want and call person.save().
});

해결법

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

    1.당신이 가까이있어; 당신은 그렇게 할 수있는 $ 업데이트 연산자의 사용에 점 표기법을 사용한다 :

    당신이 가까이있어; 당신은 그렇게 할 수있는 $ 업데이트 연산자의 사용에 점 표기법을 사용한다 :

    Person.update({'items.id': 2}, {'$set': {
        'items.$.name': 'updated item2',
        'items.$.value': 'two updated'
    }}, function(err) { ...
    
  2. ==============================

    2.

    model.update({"_id": 1, "items.id": "2"}, 
    {$set: {"items.$.name": "yourValue","items.$.value": "yourvalue"}})
    

    MongoDB의 문서

  3. ==============================

    3.각 문서의 경우, 업데이트 운영자 $ 세트는 여러 값을 설정할 수 있습니다, 그래서 오히려 항목 배열의 전체 개체를 교체하는 것보다, 개별적으로 객체의 이름과 값 필드를 설정할 수 있습니다.

    각 문서의 경우, 업데이트 운영자 $ 세트는 여러 값을 설정할 수 있습니다, 그래서 오히려 항목 배열의 전체 개체를 교체하는 것보다, 개별적으로 객체의 이름과 값 필드를 설정할 수 있습니다.

    {'$set':  {'items.$.name': update.name , 'items.$.value': update.value}}
    
  4. ==============================

    4.그 일을위한 몽구스 방법이있다.

    그 일을위한 몽구스 방법이있다.

    const itemId = 2;
    const query = {
      item._id: itemId 
    };
    Person.findOne(query).then(doc => {
      item = doc.items.id(itemId );
      item["name"] = "new name";
      item["value"] = "new value";
      doc.save();
    
      //sent respnse to client
    }).catch(err => {
      console.log('Oh! Dark')
    });
    
  5. ==============================

    5.몽구스에서 우리는 간단한 배열처럼, 업데이트 할 수 있습니다

    몽구스에서 우리는 간단한 배열처럼, 업데이트 할 수 있습니다

    user.updateInfoByIndex(0,"test")
    
    User.methods.updateInfoByIndex = function(index, info) ={
        this.arrayField[index]=info
        this.save()
    }
    
  6. ==============================

    6.몽구스, 우리는 방법을 다음과 같은 특정 값에 점 (.) 표기법 내부 $ 세트를 사용하여 배열 값을 업데이트 할 수 있습니다

    몽구스, 우리는 방법을 다음과 같은 특정 값에 점 (.) 표기법 내부 $ 세트를 사용하여 배열 값을 업데이트 할 수 있습니다

    db.collection.update({"_id": args._id, "viewData._id": widgetId}, {$set: {"viewData.$.widgetData": widgetDoc.widgetData}})
    
  7. ==============================

    7.

    update(
        {_id: 1, 'items.id': 2},
        {'$set': {'items.$[]': update}},
        {new: true})
    

    여기에 $에 대한 문서는 [].

  8. ==============================

    8.기억해야 할 한 가지가있다, 당신은 하나 개 이상의 조건을 기준으로 배열에서 객체를 검색 할 때 다음 elemMatch $를 사용

    기억해야 할 한 가지가있다, 당신은 하나 개 이상의 조건을 기준으로 배열에서 객체를 검색 할 때 다음 elemMatch $를 사용

    Person.update(
       {
         _id: 5,
         grades: { $elemMatch: { grade: { $lte: 90 }, mean: { $gt: 80 } } }
       },
       { $set: { "grades.$.std" : 6 } }
    )
    

    여기에 문서입니다

  9. from https://stackoverflow.com/questions/15691224/mongoose-update-values-in-array-of-objects by cc-by-sa and MIT license