【发布时间】:2023-03-07 06:18:01
【问题描述】:
我需要更新下面提到的集合的 userAns,ansBody 字段。 where 条件会有 userId ,userQuestions._id 和 quesId。
{
"_id" : ObjectId("5b9624b56b0fe824352e887a"),
"userId" : ObjectId("5b8fd089ee2e6c07765ba024"),
"userQuestions" : [
{
"testStatus" : NumberInt(1),
"_id" : ObjectId("5b9624b56b0fe824352e887f"),
"questionsId" : [
{
"_id" : ObjectId("5b9624b56b0fe824352e8885"),
"quesId" : ObjectId("5b94f1e97b8adc3d46854518"),
"userAns" : "",
"ansBody" : "",
"ansStatus" : ""
}
我尝试过的
let paramObj={
userId:"5b8fd089ee2e6c07765ba024",
quesSetId:"5b9624b56b0fe824352e887b",
quesId:"5b9619311d9b1b1834f2cd23",
ansId:"5b9619311d9b1b1834f2cd27",
ansBody:"abc123"
}
let questionSet=await QuestionSet.update({userId:paramObj.userId,"userQuestions._id":paramObj.quesSetId},
{ $set: {"userQuestions.$[t].questionsId.$[u].ansBody": paramObj.ansBody} },
{ arrayFilters: [ { "t.quesId":paramObj.quesId },{"u.quesId": paramObj.quesId} ] } );
事件虽然它给了我修改后的输出,但文档没有得到更新。
【问题讨论】:
-
试试
let paramObj={ userId:mongoose.Types.ObjectId("5b8fd089ee2e6c07765ba024"); quesSetId:mongoose.Types.ObjectId("5b9624b56b0fe824352e887b"), quesId:mongoose.Types.ObjectId("5b9619311d9b1b1834f2cd23"), ansId:mongoose.Types.ObjectId("5b9619311d9b1b1834f2cd27"), ansBody:"abc123" } let questionSet=await QuestionSet.update({userId:paramObj.userId}, { $set: {"userQuestions.$[t].questionsId.$[u].ansBody": paramObj.ansBody} }, { arrayFilters: [ { "t._id": param.quesSetId"}{"u.quesId": paramObj.quesId} ] } ); -
这也应该有效。
let questionSet=await QuestionSet.update({userId:paramObj.userId,"userQuestions._id":paramObj.quesSetId}, { $set: {"userQuestions.$.questionsId.$[u].ansBody": paramObj.ansBody} }, { arrayFilters: [ {"u.quesId": paramObj.quesId} ] } ); -
请确保 id 匹配并且您是 3.6 服务器版本。
-
您可以尝试在 shell 中设置标志并尝试吗?
use admin db.adminCommand ({setFeatureCompatibilityVersion: "3.6"}) -
好的。您不需要新用户。你有管理员用户吗?您可以在 studio 3t 中尝试查询,看看它是否有效?将 QuestionSet 替换为集合名称,将猫鼬对象 id 替换为
ObjectId。
标签: node.js mongodb express mongoose