MEAN-Stack使用mongoose在MongoDB中保存数组

时间:2016-08-05 07:18:04

标签: javascript angularjs mongodb mean-stack meanjs

我是网络开发的新手,我遇到了一个我无法解决的问题。我开始使用MEAN - Stack到目前为止我遇到了以下问题。

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

Angular JS Controller代码段

$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' }

        ]
      }
    }
];

从上面的代码段中,我想在提醒中保存每个提醒的标题权重

为此,我在相同的角度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,
  });

提供了有用的解决方案!

3 个答案:

答案 0 :(得分:1)

将您的架构更改为此,它应该有效:

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中的数组,然后您可以在数组中保存多个对象。

答案 1 :(得分:0)

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

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 save documentation供参考

答案 2 :(得分:0)

如果您正在使用MEAN,那么在Express,Mongodb(Mongoose)和Nodejs上处理的服务器上会保存数据。

我假设你正在使用你的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);
    }
  });
};