Вставить отметку даты в новую запись в массив - PullRequest
0 голосов
/ 25 апреля 2020

В коллекции MongoDB я хочу добавить новый объект в массив, который может существовать или не существовать, с датой создания объекта в качестве одного из полей. Вот базовая версия структуры моей коллекции test, показывающая результат, которого я хочу достичь:

{
  "_id" : 1,
  "parent" : {
    "array_1" : [
      { "key" : "value_1"
      , "created": ISODate(...)
      }
    ]
  }
}

В meteor mongo я создаю родителя с помощью следующих команд:

use test
db.test.insert({ _id: 1, parent: {} })

Я могу добавить новый массив с помощью следующей команды:

db.test.update(
  { _id: 1 }
, { $push: {
     "parent.array_1": {
       key: "value_1"
      }
    }
  }
, { $currentDate: 
    { "parent.array_1.$.created": true }
  }
)

Однако в результирующем массиве поле created не добавляется. Мне нужно использовать вторую команду, которая ссылается на массив в запросе выбора:

db.test.update(
  { _id: 1
  , "parent.array_1.key": "value_1"
  }
, { $currentDate: 
    { "parent.array_1.$.created": true}
  }
)

Есть ли способ вставить поле created одновременно с элементом массива, которому оно принадлежит, в одной команде?

1 Ответ

1 голос
/ 26 апреля 2020

Вы передаете 3 аргумента update. Второй аргумент должен быть обновлением, а третий - объектом опций. Если вы хотите включить время создания в элемент массива, убедитесь, что оно находится в объекте, который вы помещаете в массив. Поскольку вы используете javascript, это может быть:

db.test.update(
  { _id: 1 }
, { $push: {
     "parent.array_1": {
       key: "value_1",
       created: new Date()
      }
    }
  }
)
...