如何解决如果不存在猫鼬,则将该对象追加到数组
我有两种不同的猫鼬模式,用于保存国家和相关州的数据库。 在国家架构中,我有一个mongo操作来创建一个新国家。在州模式中,我有一个mongo操作来创建与每个国家/地区相关的新州。 所以我的状态架构是这样的:
const mongoose = require('mongoose');
const id = mongoose.Schema.Types.ObjectId;
const stateSchema = mongoose.Schema(
{
_id: id,states: [{
name: { type: String,required: false }
}],country: { ref: 'countries',type: id,required: true }
},{
timestamps: true
}
);
module.exports = mongoose.model("states",stateSchema);
我需要执行的是为特定国家/地区创建一个新州。每个创建的新州都将成为一个对象,并被推到州的数组中(因为一个国家有多个州)。
我要创建的代码:
exports.createStates = async (req,res) => {
const { name,country_id } = req.body;
try {
const country_exist = await States.find({ country: country_id });
if (country_exist.length === 0) {
const states_name = [];
states_name.push({ name });
const states = new States({
_id: new mongoose.Types.ObjectId(),country: country_id,states: states_name,});
const new_state = await states.save();
res.status(201).json({ message: 'created',data: new_state })
}
else {
const append_state = await States.updateOne(
{
country: country_id,states: [{ name }]
},{
$addToSet: { states: [{ name }] },}
);
res.status(201).json({ message: "appended",append_state });
}
} catch (error) {
console.log(error);
res.status(500).json({ message: "Internal server error",error });
}
}
按照我的方法,我正在检查州模式中是否存在特定国家/地区的ID。如果不是,则将第一个新州从req.body
保存到该国家的ID。如果该国家/地区已经存在,并且需要再次为同一国家/地区添加第二个州,则应将其推送到具有匹配国家/地区ID的现有数据集。 (为此使用$addToSet
)。
问题:
第一次将新状态添加到数据库中。
例如, 我有两个国家:
德国(id = 5f315ade387dc214bd33a70b)和印度(id = 5f315acb387dc214bd33a70a)。 我在德国插入了一个新州“慕尼黑”。有效。并导致:
{
"_id" : ObjectId("5f3246615ed7cd4b073b0ab5"),"country" : ObjectId("5f315ade387dc214bd33a70b"),"states" : [
{
"_id" : ObjectId("5f3246615ed7cd4b073b0ab6"),"name" : "Munich"
}
]
}
然后,如果我尝试向同一数据添加新状态“柏林”,则它什么都不做。新状态“柏林”未推送到数据库。结果应该是这样的:
{
"_id" : ObjectId("5f3246615ed7cd4b073b0ab5"),"states" : [
{
"_id" : ObjectId("5f3246615ed7cd4b073b0ab6"),"name" : "Munich"
},{
"_id" : ObjectId("5f3246615ed7cd4b073b0ab7"),"name" : "Berlin"
}
]
}
同样的事情发生在另一个国家的另一个州。仅插入第一个数据。但是第二个数据没有推送到同一国家。
任何帮助您解决此问题的帮助,
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。