我想根据变量传递的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"
]
}
}
}