#javascript #mongodb
#javascript #mongodb
Вопрос:
У меня есть коллекция, которая содержит такие данные:
[{
_id: a,
createdAt: "2020-11-10",
createdBy: "test@test.com",
features: {
first: true,
second: true
}},{
_id: b,
createdAt: "2020-11-10",
createdBy: "test@test.com",
features: {
first: false,
second: true
}}]
Я хотел бы вставить новую функцию: third: true
db.collection.update( { _id:...} , { $set: { features.third : true } }
Мои вопросы в том, возможно ли вставить новую строку для одной из этих функций и в то же время, когда mongodb видит, что есть поле типа «третье», а значение равно true, чем mongodb автоматически генерирует новое поле (featureConfig), значение которого является пустой строкой?
таким образом, ожидаемое значение равно :
{
_id: b,
createdAt: "2020-11-10",
createdBy: "test@test.com",
features: {
first: false,
second: true,
third: true
},
featureConfig: "",
}
Любая помощь будет оценена.
Ответ №1:
Попробуйте этот запрос и проверьте, работает ли он так, как ожидалось (пример)
Это запрос:
db.collection.aggregate([
{
"$match": {
"id": 1
}
},
{
"$set": {
"features.third": true
}
},
{
"$project": {
"features": 1,
"featureConfig": {
"$cond": {
"if": "$features.third",
"then": "",
"else": "$false"
}
}
}
}
])
Два начальных этапа те же, что и у вас, фильтруют по соответствию id
и устанавливают значение. Затем я использовал $project
для создания поля featureConfig
, основанного на условии. Если features.third
значение равно true, то создайте поле, в противном случае нет.