猫鼬无法通过“field.attributes”进行嵌套搜索

Posted

技术标签:

【中文标题】猫鼬无法通过“field.attributes”进行嵌套搜索【英文标题】:mongoose unable to make nested search through "field.attributes" 【发布时间】:2021-01-05 06:06:18 【问题描述】:
 newFormName = req.body.name;
  newFormQuestions = req.body.questions;
  formId = req.body.formId;

  User.updateOne(
    
      "forms._id": formId,
    ,
    
      $set: 
        "forms.$.name": newFormName,
        "forms.$.questions": newFormQuestions,
      ,
    ,
    (errUpdate, resultUpdate) => 
      if (errUpdate) 
        return res.status(500).json( sucess: false, error: errUpdate );
       else 
        return res.status(200).json( sucess: true, data: resultUpdate );
      
    
  );

以上代码负责更新用户数据库中的某些字段。

用户数据外观示例

[ "enrolledEventID": [], “isOrganiser”:是的, “isAdmin”:假, “形式”: [ “问题”: [ "questionType": "文本", “textInputLabelName”:“asdsadsad” , "questionType": "文本", "textInputLabelName": "asdasdasdasd" ], "_id": "5f6070b5002a5249b050bd1e", "name": "测试表 4", "创建日期": "2020-09-15T07:43:49.389Z", “__v”:0 , “问题”: [ "questionType": "文本", “textInputLabelName”:“asdsadsad” , "questionType": "文本", "textInputLabelName": "asdasdasdasd" ], "_id": "5f607140cd6faa39241f7c8a", "name": "测试表 56", "创建日期": "2020-09-15T07:46:08.012Z", “__v”:0 , “问题”: [ "questionType": "评分", "textInputQuestionTitle": "asdasdasd", “总评分”:0 , "questionType": "文本", "textInputLabelName": "asdasdasdasd" , "questionType": "文本", "textInputLabelName": "asdasdasdasdasd" ], "_id": "5f6315145e6c794e78bcce73", "name": "新形式", "创建日期": "2020-09-17T07:49:40.307Z", “__v”:0 , “问题”: [ "questionType": "评分", "textInputQuestionTitle": "asdasdasdsadad", “总评分”:0 ], "_id": "5f6316895e6c794e78bcce74", "name": "新格式", "创建日期": "2020-09-17T07:55:53.537Z", “__v”:0 , “问题”: [ "questionType": "文本", “textInputLabelName”:“asdsadsad” , "questionType": "文本", "textInputLabelName": "asdasdasdasd" ], "_id": "5f632b0f12f05d5028c96942", "name": "测试表 23232323", "创建日期": "2020-09-17T09:23:27.137Z", “__v”:0 ], "_id": //id, "fullname": //名字, "email": //hotmail, "password": //密码, “__v”:0 , "enrolledEventID": [], “isOrganiser”:是的, “isAdmin”:假, “形式”: [], "_id": //id, "fullname": //名字, “电子邮件”://电子邮件, "password": //密码, “__v”:0 ]

问题是匹配总是返回 0,我是猫鼬的新手,在做了一些研究之后,我似乎应该能够通过"forms._id" 访问标准中的forms._id,做了什么我做错了吗?

我已确保用户数据中存在 formId。

【问题讨论】:

如果forms._id是数据中的对象ID,那么您需要使用mongoose.Types.ObjectId(formId)转换为对象ID 解决了,你的就是答案 我没有回答,因为它只是拼写错误,或者您错过了从字符串到对象的类型对话。您可以删除您的问题。 【参考方案1】:

确保 newFormQuestions 具有与问题相同的对象键。

为您不确定的每个步骤执行 console.log。

作为此猫鼬更新的替代方案,请使用 const temp = User.find(forms._id:formId) 首先,

然后您可以在将值分配给您找到的对象后使用 User.save()。

祝你好运^^

【讨论】:

以上是关于猫鼬无法通过“field.attributes”进行嵌套搜索的主要内容,如果未能解决你的问题,请参考以下文章

无法使用猫鼬更改密码

通过 POST 请求更新猫鼬模式的属性

带有异步队列和瀑布的猫鼬

无法向(猫鼬)对象添加其他元素

无法查询嵌套的猫鼬数组?

无法将猫鼬虚拟与打字稿一起使用