【问题标题】:Is there any method to store array values in MongoDB's field?有没有什么方法可以在 MongoDB 的字段中存储数组值?
【发布时间】:2022-01-25 18:47:34
【问题描述】:

我有一个模式,我希望它在其中一个字段中存储值数组。架构如下:

const memberSchema=new mongoose.Schema({
  id:{
    type:String,
    unique:true
  },
 prefCurrency:{
    type:String,
    default:'AUD',
    required:false
  },
});

在前端部分,用户将选择多种货币,可以存储在schema的prefCurrency字段中。前端代码如下:

export default function MemberInformation() {
    const { t } = useTranslation();
    const[memberData,setMemberData]=useState([]);
    const [member,setMember]=useState({id:"",prefCurrency:""})
        var name,valueV;
        const handleInputs=e=>{
          console.log("Updated ",member)
          name=e.target.name;
          valueV=e.target.value;
          setMember({...member,[name]:valueV})
        }
const postData= ()=>{
          setMemberData({...memberData,...member})
          const {id,prefCurrency}=member;
          var UpdatedMemInfo ={id,prefCurrency};
          axios.put('/memberInfoUpdate', UpdatedMemInfo)
          .then( res => {
            alert('Updated successfully!');
           }   
          )
          .catch(err => {
            console.log(err.response);
            alert('An error occurred! Try submitting the form again.');
          });
       } 
useEffect(() => {
        async function fetchBooks() {
          const response = await fetch('/memberinfo');
          const json = await response.json();
          setMemberData(json.memberLogin);
          setMember(json.memberLogin);
          console.log(json.memberLogin)
      }
      fetchBooks();
  },[]);
return (
<Form.Select aria-label="Floating label select example" name="prefCurrency" value={member.prefCurrency} onChange={e=>handleInputs(e)}>
                        <span><ReactCountryFlag countryCode="AU" svg style={myStyle}/></span> 
                        <option value="AUD" name="prefCurrency">AUD</option>
                        <option value="CAD" name="prefCurrency">CAD</option>
                        <option value="CHF" name="prefCurrency">CHF</option>
                        <option value="CNY" name="prefCurrency">CNY</option>
                   </Form.Select>
 <Button variant="success" onClick={()=>postData()}>
                Save Changes
              </Button>
)
}

在上面的代码中,只能选择一个值并将其存储到 MongoDB 但我想选择多个值并以数组的形式存储在架构的 prefCurrency 字段中,然后从数据库中检索它以显示它.这里的代码会有什么变化?

将上述数据发布到数据库的API如下:

router.put('/memberInfoUpdate', async (req, res) => {
  const {id,prefCurrency}=req.body;
  var _id = req.body.id;
  var UpdatedMemInfo = {
    id:id,
    prefCurrency:prefCurrency  
  };
  Member.findOneAndUpdate(_id, UpdatedMemInfo, { new: true }, function(
    err,
    UpdatedMemInfo
  ) {
    if (err) {
      console.log("err", err);
      res.status(500).send(err);
    } else {
      console.log("success");
      res.send(UpdatedMemInfo);
    }
  });
  });

上述更新 API 仅适用于 prefCurrency 字段中的一个值,但我希望其中有多个选定值。

【问题讨论】:

标签: node.js reactjs mongoose mongoose-schema


【解决方案1】:

用于存储数组值的 prefCurrency Schema 看起来像这样。 const memberSchema=new mongoose.Schema({

  id:{
    type:String,
    unique:true
  },
 prefCurrency:{
    type:Array,
    default:'AUD',
    required:false
  },
});

并且更新prefCurrency的查询是

 var UpdatedMemInfo = {
    id:id,
    prefCurrency:[prefCurrency]  
  };

这将获取值数组并对其进行更新。

【讨论】:

    猜你喜欢
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    相关资源
    最近更新 更多