Mongodb if statement



我想根据变量传递的dropData(true或false)更新一个字段

const updateResponse = await quiz.updateOne(
{ user: ObjectId(user._id), _id: ObjectId(questionId)},
[{ $set: { 
answers: answers, 
correctAnswer: correctAnswer,
question: question,
description: description,
category: category,  
answersFromUsers: {
$cond: {
if: {
dropData 
},
then: [], 
else: '$answersFromUsers', 
}
}
} }],        
)

然而,字段answersFromUsers总是被更改为空数组,即使dropData为false。

$cond (aggregation)

计算布尔表达式以返回两个指定的返回表达式之一。

{ $cond: { if: <boolean-expression>, then: <true-case>, else: <false-case> } }

当你在<boolean-expression>中添加括号时,mongoDB将寻找表达式操作符,但在你的情况下,你只需要添加bollean:

$cond: {
if: dropData,
then: [], 
else: '$answersFromUsers', 
}

如果您在发送查询之前就知道这些值,则无需在数据库中使用MQL执行条件。

您可以在发送查询之前这样做,如

var answersFromUsers;
if(dropData) answersFromUsers=[];
else answersFromUsers='$answersFromUsers';
const updateResponse = await quiz.updateOne(
{ user: ObjectId(user._id), _id: ObjectId(questionId)},
[{ $set: { 
answers: answers, 
correctAnswer: correctAnswer,
question: question,
description: description,
category: category,  
answersFromUsers: answersFromUsers,
} }],        
)

如果你在发送查询之前不知道这些值,你可以在服务器上这样做

{
"$set": {
...otherfields...
"answersFromUsers": {
"$cond": [
dropData,      //your javascript variable
[],
"$answersFromUsers"
]
}
}
}

最新更新