#node.js #mongodb #mongoose
Вопрос:
Я использую mongoose v5.13 на NodeJS
Для документа, идентификатор которого я знаю
{
_id: ...,
edible: 'fruit'
}
Я хочу получить update
этот документ и сделать это
if (obj.edible == 'fruit') {
obj.edible = 'apple';
} else if(obj.edible == 'vegetable') {
obj.edible = 'carrot';
}
Но для этого мне нужно сначала найти, а затем обновить, следовательно, два запроса, мой вопрос в том, могу ли я сделать это за одну операцию
Ответ №1:
db.collection.update(
{
_id: ObjectId("61723c7378b6d3a5a02d908e")
},
[
{
$set: {
edible: {
$switch: {
branches: [
{ case: { $eq: [ "$edible", 'fruit' ] }, then: "apple" },
{ case: { $eq: [ "$edible", 'vegetable' ] }, then: "carrot" }
],
default: "$edible"
}
}
}
}
])
Ответ №2:
Запрос
- требуется обновление конвейера > = MongoDB 4.2
- у вас есть только 2 варианта, которые вы могли бы использовать
$cond
, но я использовал$switch
, чтобы вы могли добавить больше, если это необходимо
update(
{"_id": {"$eq": 1}},
[{"$set":
{"edible":
{"$switch":
{"branches":
[{"case": {"$eq": ["$edible", "fruit"]}, "then": "apple"},
{"case": {"$eq": ["$edible", "vegetable"]}, "then": "carrot"}],
"default": "unknown"}}}}])