Я хочу создать скрипт обновления по этим данным:
{
"_id" : ObjectId("5b87e83d881ba01dfc3b0367"),
"Views" : [
{
"ReportUniqueKey" : "AAA",
"GroupMode" : NumberInt("0"),
"DisplayName" : "Default",
"Columns" : [],
"UnusedOptionalFilterParameter" : null,
"IsDefault" : true,
"LastModified" : ISODate("0001-01-01T01:00:00.000+01:00"),
"LastModifiedUserId" : NumberInt("0"),
"Guid": "6988FBD83E5A4C889E8E96646033D836"
},
{
"ReportUniqueKey" : "9E91595D92DE4E01B72895B1B88C474D",
"GroupMode" : NumberInt("0"),
"DisplayName" : "Pro Tour",
"Columns" : [],
"UnusedOptionalFilterParameter" : null,
"IsDefault" : false,
"LastModified" : ISODate("2018-08-03T13:13:20.330+02:00"),
"LastModifiedUserId" : NumberInt("1")
}
]}
Это только один документ, их больше. Теперь я хочу обновить все объекты Views, где поле "Guid" не существует или пустая / пустая строка. Если для параметра Guid установлено значение Value, не обновляйте поле.
Guid генерируется этой функцией:
function S4() {
return (((1+Math.random())*0x10000)|0).toString(16).substring(1);}
function generateGuid(){
return (S4() + S4() + S4() + S4() + S4() + S4() + S4() + S4()).toUpperCase();}
Как мне добиться этого обновления для всех документов? Я нашел это на сайте MongoDB, но я не знаю, как мне попасть в массив.
db.TestGuid.aggregate([{$project:{Guid:{$ifNull: [ "$Guid", "Test"]}}}])
Как мне заставить этот скрипт работать с массивом объектов?