有什么方法可以将数组值存储在 MongoDB 的字段中吗?

Is there any method to store array values in MongoDB's field?

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

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

在前端部分,用户将select多种货币,这些货币可以存储在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>
)
}

在上面的代码中,只能select编辑一个值并将其存储到MongoDB中,但我想要select多个值并以数组的形式存储在模式的 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 字段中的一个值,但我想在其中包含多个 selected 值。

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]  
  };

这将获取值数组并更新它。