ProgramingTip

몽구스, 배열의 값 업데이트

bestdevel 2020. 10. 29. 08:24
반응형

몽구스, 배열의 값 업데이트


개체의 값을 업데이트하는 방법이 있습니까?

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

id = 2 인 항목의 이름과 값 항목을 업데이트하고 싶다고 가정 해 보겠습니다.

나는 몽구스와 함께 다음을 시도했습니다.

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

이 접근 방식의 해결은 전체 객체를 업데이트 / 설정한다는 것입니다.

몽구스에서 배열의 특정 값을 설정하고 다른 값은 그대로 두는 더 좋은 방법이 있습니까?

나는 또한 Person에 대해 쿼리했습니다.

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().
});

당신은 가깝습니다. $업데이트 연산자사용하는 점 표기법을 사용 합니다.

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

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

Mongodb 문서


문서에 대해 각 업데이트 연산자 $set여러 값을 설정할있으므로 items배열 의 전체 object-를 바꾸는 대신 object- namevalue필드를 개별적으로 설정할 수 있습니다 .

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

몽구스 방법이 있습니다.

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')
});

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

user.updateInfoByIndex(0,"test")

User.methods.updateInfoByIndex = function(index, info) ={
    this.arrayField[index]=info
    this.save()
}

Mongoose에서는 다음과 같이 $set내부 점 ( .) 표기법을 사용하여 배열 값 을 특정 값으로 업데이트 할 수 있습니다.

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

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

다음은 $ [] 에 대한 문서 입니다.


하나 이상의 조건을 기준으로 배열에서 객체를 검색 할 때 $ elemMatch 를 사용하는 것을 기억해야합니다.

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

여기에 문서가 있습니다.

참고 URL : https://stackoverflow.com/questions/15691224/mongoose-update-values-in-array-of-objects

반응형