#mongodb
#mongodb
Вопрос:
У меня в коллекции есть следующие документы.
{
"_id" : ObjectId("5c98760c27b9fb1266f996b3"),
"user_id" : ObjectId("5c8109785b9a5427b167542a"),
"permissions" : [
{
"dashboard" : [
"Pie Chart",
"Bar Chart"
],
"product management" : [
"update",
"delete",
"list",
"insert"
],
"app user listing" : [
"insert",
"update",
"delete",
"list"
]
}
]
}
Я пытаюсь выполнить следующий запрос:
db.user_permissions.update(
{ user_id: ObjectId("5c8740860c5dcf6c615c1ba3") },
{
"permissions.app user listing": ['inserts']
}
)
что я хочу сделать, так это обновить значение «список пользователей приложения».
Любая помощь приветствуется.
Редактировать: Это то, что я хочу
Ожидаемый результат:
{
"_id" : ObjectId("5c98760c27b9fb1266f996b3"),
"user_id" : ObjectId("5c8109785b9a5427b167542a"),
"permissions" : [
{
"dashboard" : [
"Pie Chart",
"Bar Chart"
],
"product management" : [
"update",
"delete",
"list",
"insert"
],
"app user listing" : [
"inserts"
]
}
]
}
Я хочу обновить значение данного ключа с помощью массива.
Комментарии:
1. почему бы вам не изменить имя атрибута на регистр snake? т.е.
app_user_listing
?2. Удалить
ObjectId
из обновления соответствие также:{user_id : "5c8740860c5dcf6c615c1ba3"}
было бы достаточно3. @vahdet это не работает / не будет работать
4. @Kai Я хотел бы
5. В целом, какая у вас проблема с вашим текущим кодом? Он ничего не обновляет? Выдает исключение и т.д.?
Ответ №1:
Это работает на всех версиях mongo, вам нужен второй аргумент для поиска,
db.myColl.update(
{
"user_id" : ObjectId("5c8109785b9a5427b167542a"),"permissions.app user listing":["insersssts"]
},
{
$set: {
"permissions.$.app user listing":["insertss"]
}
});
Ответ №2:
Попробуйте, как показано ниже:
db.user_permission.update(
{
"user_id" : ObjectId("5c8109785b9a5427b167542a")
},
{
$set: {
"permissions.$[].app user listing": ['inserts']
}
},
{
upsert:false
}
)
Данные перед выполнением запроса :
{
"_id" : ObjectId("5c98760c27b9fb1266f996b3"),
"user_id" : ObjectId("5c8109785b9a5427b167542a"),
"permissions" : [
{
"dashboard" : [
"Pie Chart",
"Bar Chart"
],
"product management" : [
"update",
"delete",
"list",
"insert"
],
"app user listing" : [
"insert",
"update",
"delete",
"list"
]
}
]
}
После выполнения запроса:
{
"_id" : ObjectId("5c98760c27b9fb1266f996b3"),
"user_id" : ObjectId("5c8109785b9a5427b167542a"),
"permissions" : [
{
"dashboard" : [
"Pie Chart",
"Bar Chart"
],
"product management" : [
"update",
"delete",
"list",
"insert"
],
"app user listing" : [
"inserts"
]
}
]
}
Комментарии:
1. Вы тестировали это? Это ошибка
cannot use the part (permissions of permissions.$[].app_user_listing) to traverse the element ({permissions: [ { dashboard: [ "Pie Chart", "Bar Chart" ], product management: [ "update", "delete", "list", "insert" ], app user listing: [ "inserts" ] } ]})
2. Эта ошибка может быть вызвана подчеркиванием. Я обновил свой пост, чтобы попробовать еще раз. И я протестировал его с моей стороны, он работает нормально.
3. Я пытался без использования символов подчеркивания (так же, как в вашем случае). и это также работает.
4. будет ли оно использоваться в waterline orm?
5. Я запускаю этот запрос в графическом интерфейсе mongodb «NoSqlBooster».