MongoDB - обновить родителя, используя child - PullRequest
0 голосов
/ 04 октября 2018

У меня есть такая структура документа: (но со многими маркерами и формами)

{
  markers : [
    {
      id : 1,
      updateDate : 1538051924574,
      forms : [
        {
          id : 2,
          sent : false
        }
      ]
    }
  ]
}

И я хотел обновить form.sent до true, поэтому я сделал этот запрос:

updateOne({
}, {
  $set: {
    "markers.$[].forms.$[b].sent": true
  }
}, {
  arrayFilters: [
    {"b.id": "2"}
  ]
})

Все работает так, как задумано, но теперь я хотел бы обновить markers.udpateDate для каждого обновления формы.Но у меня нет доступа к marker.id, я могу использовать только form.id.

У меня вопрос, могу ли я обновить родительский атрибут, используя только дочерний метод доступа?

Я уже пробовал что-то вроде этого:

updateOne({
}, {
  $set: {
    "markers.$[].forms.$[b].sent": true,
    "markers.$[].updateDate": Date.now()
  }
}, {
  arrayFilters: [
    {"b.id": "2"}
  ]
})

Но, как я думаю, он делаетобновить все маркеры в массиве ..

Если у кого-то есть идеи,

Спасибо

1 Ответ

0 голосов
/ 04 октября 2018

Просто добавьте еще один заполнитель для родителя и продублируйте arrayFiter с этим новым заполнителем:

db['01'].updateOne({
}, {
  $set: {
    "markers.$[].forms.$[b].sent": true,
    "markers.$[dateUp].updateDate": Date.now()  <=
  }
}, {
  arrayFilters: [
    {"b.id": 2},  
    {"dateUp.forms.id":2}  <=
  ]
})

Примечание. Вы использовали строковое значение в своих arrayFilters, но в соответствии с вашей схемой это должно быть число.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...