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

问题描述:

我是网络开发新手,我遇到了一个我无法解决的问题。我从MEAN开始,到目前为止,我遇到了以下问题。MEAN-Stack使用猫鼬在MongoDB中保存数组

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

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

     ] 
     } 
    } 
]; 

从上面的代码段中,我想保存标题,所述和警告中

对于每个警报的重量这个目的,我在相同的角度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, 
    }); 

交付通缉的解决方案!

+1

你在模型上调用'save()'方法的位置,即'article.save()'? – chridam

+0

我在我的文章article.server.controller.js文件,我没有在这里列出,但它看起来像下面提供的一个codeGig – danielkr

您的架构改成这样,它应该工作:

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

+0

没有办法,MongoDB中的输入仍然是一个空数组。或者我需要改变'alert:this.alert,'这个不知何故? – danielkr

+0

谢谢,帮助了很多!它适用于数组。在这个特定情况下,问题在于它必须是'alerts:[]'和'alerts:this.alerts'才能工作 – danielkr

+0

这对我也有帮助。在我发现这一点之前,我一直在为同样的问题奋斗了近一个星期。谢谢! –

您需要在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 save documentation参考

+0

由于codeGig声明是已​​在我的项目中提到的代码。我能够将数据保存到猫鼬,但不幸的是,警报数组是空的,没有填写我提到的值 – danielkr

如果您正在使用MEAN然后保存数据来自于服务器是处理上快速,MongoDB的(猫鼬)和的NodeJS。

我假设你正在使用哟

首先Meanjs你需要做一个其中由您的角度$ 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); 
    } 
    }); 
}; 
+0

我正在使用Mean js,并且我使用yo生成了该项目。但是我已经完成了您在我的项目中提到的由yeoman生成器生成的所有代码。我可以将数据写入猫鼬中,但猫鼬中的数据由一个空警报数组组成,而不是由上面定义的值填充。 – danielkr