如何将数据推送到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中的另一个模式的主要内容,如果未能解决你的问题,请参考以下文章

如何使用python将csv数据推送到mongodb

如何将实时数据从 nodejs 服务器推送到 AngularJS?

使用 OneSingnal 从 NodeJS 发送通知推送到 React Native

如何通过 mongoose 将多个数组元素推送到 mongodb

使用 mongoose 将字符串数组推送到 mongoDB

在nodejs中的代理后面连接到mongodb数据库