Мангуст, обновить значения в массиве объектов



есть ли способ обновить значения в объекте?



{
_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) { ...


проблема с этим подходом заключается в том, что он обновляет/устанавливает весь объект, поэтому в этом случае я потеряю поле 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().
});
684   6  

6 ответов:

вы близки; вы должны использовать точечную нотацию в вашем $set для этого:

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 can задать несколько значений, так что вместо замены всего объекта в items массив, вы можете установить name и value поля объекта по отдельности.

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

в мангусте мы можем обновить, как простой массив

user.updateInfoByIndex(0,"test")

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

В Мангусте, мы можем обновить значение массива с помощью $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})

вот документ о $[].

Comments

    Ничего не найдено.