"MongoDB версия: 4.2 ОС: OSX
У меня есть следующий документ в коллекции Home:
{
"_id" : "xxxx",
"name" : "home1",
"homeName" : "home1",
"allowAdminActions" : true,
"_created_at" : ISODate("2020-02-07T14:55:06.819Z"),
"_updated_at" : ISODate("2020-02-07T14:55:12.356Z"),
"_p_Owner" : "xxxxx",
"allowUpdate" : false,
"devicesConfig" : {
"hello" : 1,
"deviceConfig" : {
"data" : [
{
"type" : "CommunicationConfig",
"wifiName" : "wifitest",
"wifiPassword" : "wifipassword"
}
]
}
}
}
Затем я хотел бы создать поле с именем wifiName
, экстраполированное из devicesConfig
поле:
db.Home.update(
{},
[
{"$project": {"connConfig": {$arrayElemAt: ["$devicesConfig.deviceConfig.data", 0]}}},
{"$set": {"wifiName": "$connConfig.wifiName"}}
],
false,
true
)
Ожидаемые результаты будут:
{
"_id" : "xxxx",
"name" : "home1",
"homeName" : "home1",
"allowAdminActions" : true,
"_created_at" : ISODate("2020-02-07T14:55:06.819Z"),
"_updated_at" : ISODate("2020-02-07T14:55:12.356Z"),
"_p_Owner" : "xxxx",
"allowUpdate" : false,
"devicesConfig" : {
"hello" : 1,
"deviceConfig" : {
"data" : [
{
"type" : "CommunicationConfig",
"wifiName" : "wifitest",
"wifiPassword" : "wifipassword"
}
]
}
},
"wifiName" : "wifitest"
}
Фактический результат:
{
"_id" : "xxxxx",
"connConfig" : {
"type" : "CommunicationConfig",
"wifiName" : "testwifi",
"wifiPassword" : "testpassword"
},
"wifiName" : "testwifi"
}
Как избежать этого update
операция удаляет все остальные, не указанные поля?
Спасибо!