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



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

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

在前端部分,用户将选择多种货币,这些货币可以存储在架构的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字段中的一个值,但我想在其中选择多个值

prefCurrency模式在存储数组值时会是这样的。const-memberSchema=新的猫鼬。架构({

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

更新prefCurrency的查询是

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

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

最新更新