반응형
몽구스, 배열의 값 업데이트
개체의 값을 업데이트하는 방법이 있습니까?
{
_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"}})
문서에 대해 각 업데이트 연산자 $set
는 여러 값을 설정할 수 있으므로 items
배열 의 전체 object-를 바꾸는 대신 object- 의 name
및 value
필드를 개별적으로 설정할 수 있습니다 .
{'$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
반응형
'ProgramingTip' 카테고리의 다른 글
모델과 관련이없는 rails simple_form 필드 (0) | 2020.10.29 |
---|---|
동일한 키를 가진 개체가 ObjectStateManager에 이미 있습니다. (0) | 2020.10.29 |
내 ArrayList에 목록에 마지막으로 추가 된 항목의 N 개의 복사본이 포함 된 이유는 무엇입니까? (0) | 2020.10.29 |
신속한 코드에서 @objc를 언제 사용합니까? (0) | 2020.10.29 |
오류 : ': app : transformClassesWithDexForDebug'작업에 대한 실행이 실패했습니다. (0) | 2020.10.29 |