如何将数据推送到nodejs mongodb中的另一个模式
Posted
技术标签:
【中文标题】如何将数据推送到nodejs mongodb中的另一个模式【英文标题】:How to push data to another schema in nodejs mongodb 【发布时间】:2020-04-17 21:06:09 【问题描述】:感谢您点击我的问题..
我在mongodb中有两个schema,citySchema和destinationSchema。我想建立一对多的关系。每个目的地都有一个城市,而这个城市有很多目的地。
这是我的destinationSchema
var mongoose = require("mongoose");
var destinationSchema = new mongoose.Schema(
name: String,
image: String,
description: String,
city:
type: mongoose.Schema.Types.ObjectId,
ref: "City"
);
module.exports = mongoose.model("Destination", destinationSchema);
这是citySchema
var mongoose = require("mongoose");
var citySchema = new mongoose.Schema(
name: String,
image: String,
description: String,
destinations: [
type: mongoose.Schema.Types.ObjectId,
ref: "Destination"
]
);
module.exports = mongoose.model("City", citySchema);
这是创建新目的地
的发布路线router.post("/", function(req, res)
var name = req.body.name;
var image = req.body.image;
var description = req.body.description;
var city = req.body.city;
var newDestination =
name: name,
image: image,
description: description,
city: city
;
Destination.create(newDestination, function(err, newCreatedDestination)
if (err)
console.log(err);
else
res.redirect("/admin/destinations");
);
);
这是我创建新目的地
的表单<select name="city">
<% cities.forEach(function(city) %>
<option value=<%=city._id%> > <%= city.name %> </option>
<% ) %>
</select>
它工作正常。但我希望在创建新目的地时,将当前目的地 ID 推送到城市架构(目的地数组)。
对不起,我的英语不好。我感谢您的每一个回答和建议。还有谢谢???
【问题讨论】:
【参考方案1】:创建新目的地后,您可以将该目的地的 id 推送到城市目的地。
您可以使用以下路线:
router.post("/", async (req, res) =>
try
const name, image, description, city = req.body;
let newDestination = name, image, description, city ;
newDestination = await Destination.create(newDestination);
let result = await City.findByIdAndUpdate(
city,
$push: destinations: newDestination._id
,
new: true
);
res.redirect("/admin/destinations");
catch (err)
console.log(err);
res.status(500).send("Something went wrong");
);
让我们有一个这样的现有城市:
"destinations": [],
"_id": "5e071f212e9ecd31508785c6",
"name": "Padang",
"image": "image 1",
"description": "beautiful city",
"__v": 0
如果我们想将此城市添加为目的地,我们可以将此请求正文发送到我们的发布路线。请注意,作为城市值,我们需要使用现有的城市 ID (5e071f212e9ecd31508785c6
),就像我们已经拥有的一样。
"name": "destination name",
"image": "destination image",
"description": "destination description",
"city": "5e071f212e9ecd31508785c6"
结果会是这样的:
创建了一个新目标:
"_id" : ObjectId("5e071fd51cd3600bb083b5e7"),
"name" : "destination name",
"image" : "destination image",
"description" : "destination description",
"city" : ObjectId("5e071f212e9ecd31508785c6"),
"__v" : NumberInt(0)
并添加到城市:
"_id" : ObjectId("5e071f212e9ecd31508785c6"),
"destinations" : [
ObjectId("5e071fd51cd3600bb083b5e7")
],
"name" : "Padang",
"image" : "image 1",
"description" : "beautiful city",
"__v" : NumberInt(0)
【讨论】:
【参考方案2】:创建目的地后,使用猫鼬findOneAndUpdate
方法更新相关城市。
顾名思义,findOneAndUpdate() 查找第一个 匹配给定的过滤器,应用更新并返回文档。
Mongoose findOneAndUpdate
【讨论】:
以上是关于如何将数据推送到nodejs mongodb中的另一个模式的主要内容,如果未能解决你的问题,请参考以下文章
如何将实时数据从 nodejs 服务器推送到 AngularJS?
使用 OneSingnal 从 NodeJS 发送通知推送到 React Native