MEAN堆栈使用mongoose在MongoDB中保存一个数组

MEAN-Stack save an array in MongoDB with mongoose

本文关键字:数组 一个 保存 堆栈 mongoose MongoDB MEAN      更新时间:2023-09-26

我是web开发的新手,刚刚遇到一个无法解决的问题。到目前为止,我从MEAN堆栈开始,遇到了以下问题。

在我的angular js控制器中,我有一个滑块的数组结构。从这个数组结构中,我试图将一些值保存到我的数据库中。

Angular JS控制器片段

$scope.alerts = [
    { id: 1,
      title: 'CustomerCount',
      value: 1,
      weight: 30,
      options: {
        showTicks: true,
        hidePointerLabels: true,
        hideLimitLabels: true,
        stepsArray: [
            { value: 1, legend: '<10' },
            { value: 2, legend: '<50' },
            { value: 3, legend: '<250' },
            { value: 4, legend: '<500' },
            { value: 5, legend: '>500' }
        ]
      }
    },
    { id: 2,
      title: 'CustomerSatisfaction',
      value: 3,
      weight: 40,
      options: {
        showTicks: true,
        hidePointerLabels: true,
        hideLimitLabels: true,
        stepsArray: [
            { value: 1, legend: '<10' },
            { value: 2, legend: '<50' },
            { value: 3, legend: '<250' },
            { value: 4, legend: '<500' },
            { value: 5, legend: '>500' }
        ]
      }
    }
];

从上面的片段中,我想保存警报中每个警报的标题权重

为此,我在同一个angular js控制器中有以下片段

  // Create new Article object
  var article = new Articles({
    title: this.title,
    alert: this.alert,
  });

据我所知,这个片段是否使用server.model.js文件中定义的以下模式在我的数据库中创建了一个新的文章条目

var mongoose = require('mongoose'),
  Schema = mongoose.Schema;
/**
 * Article Schema
 */
var ArticleSchema = new Schema({
  created: {
    type: Date,
    default: Date.now
  },
  user: {
    type: Schema.ObjectId,
    ref: 'User'
  },
  alert: [{ value: Number, weight: Number, title: String }]
});

mongoose.model('Article', ArticleSchema);

但我现在的问题是,这只会在MongoDB中保存一个空数组。

下面给出的解决方案引出了解决方案。必须注意的是,

var mongoose = require('mongoose'),
  Schema = mongoose.Schema;
/**
 * Article Schema
 */
var ArticleSchema = new Schema({
  created: {
    type: Date,
    default: Date.now
  },
  user: {
    type: Schema.ObjectId,
    ref: 'User'
  },
  alerts: []
});
  // Create new Article object
  var article = new Articles({
    title: this.title,
    alerts: this.alerts,
  });

提供了所需的解决方案!

将您的模式更改为这样,它应该可以工作:

var mongoose = require('mongoose'),
  Schema = mongoose.Schema;
/**
 * Article Schema
 */
var ArticleSchema = new Schema({
  created: {
    type: Date,
    default: Date.now
  },
  user: {
    type: Schema.ObjectId,
    ref: 'User'
  },
  alert: []
});

mongoose.model('Article', ArticleSchema);

我只需在模式中指定[]就可以将数组保存在mongodb中,然后就可以在数组中保存多个对象。

您需要在Article模式上调用save方法。只有这样才能保存文章

var article = new Articles({
 title: this.title,
 alert: this.alert,
});
article.save(function(err, doc){
  if(!err){
    // Article saved! "doc" is the reference
  }else{
    console.error('Error on saving the article');
  }
});

以下是mongoose保存文档以供参考

如果您使用的是MEAN,则保存数据将在Express、Mongodb(Mongoose)和Nodejs上处理的服务器上进行。

我假设你使用的是yo 的Meanjs

首先,您需要创建一个路由,该路由由您的angular$http-ajax调用路线:article.server.route.js

 // Articles collection routes
  app.route('/api/articles')
    .post(articles.create);

控制器:article.server.controller.js

exports.create = function (req, res) {
  var article = new Article(req.body);
  article.user = req.user;
  article.save(function (err) {
    if (err) {
      return res.status(400).send({
        message: err
      });
    } else {
      res.json(article);
    }
  });
};