Mongoose不会从JSON数组创build子文档

我正在尝试编写一个包含一级数据和数组的MongoDB的JSON对象。

会发生什么反而是所有的第一级数据被存储,但是包含在数组中的任何东西都不是。 当logging服务器收到的数据时,我看到整个对象,这导致我相信我的Mongoose代码有问题。

所以例如,如果我发送这样的东西:

issueId: "test1", issueTitle: "testtest", rows: [ {order:1,data: [object]}, {order:2,data: [object]}, ] 

只有以下内容被存储:

 issueId: "test1", issueTitle: "testtest", lastUpdated: Date, 

我有以下Mongo的模式:

 //model.js var mongoose = require('mongoose'); var model = mongoose.Schema({ issueId : String, issueTitle : String, lastUpdated : {type: Date, default : Date.now}, rows : [{ order : Number, data : [ { title : String, text : String, link : String, } ] }] }); module.exports = mongoose.model('Model', model); 

和路由代码,我相信这个问题可能是:

 //routes.js const mongoose = require('mongoose'); const Model = require('./model.js'); ... app.post('/api/data/update', function(req, res) { let theData = req.body.dataToInsert; console.log(JSON.stringify(theData,null,4)); Model.findOneAndUpdate( {issueId : theData.issueId}, {theData}, {upsert: true}, function(err,doc){ if(err) throw err; console.log(doc); }); }); 

同样,这里是存储数据的Angular控制器的一部分。 我不认为这里有任何问题。

 pushToServer = function() { $http.post('/api/data/update',{ dataToInsert : $scope.dataObject, }).then(function successCallback(res){ console.log("all good", JSON.stringify(res,null,3)); }, function errorCallback(res){ console.log("arg" + res); }); } 

看看mongooseFAQ中的第一个问题: http : //mongoosejs.com/docs/faq.html

Mongoose不会为数组索引创buildgetter / setter; 没有他们mongoose从来没有得到通知的变化,所以不知道坚持新的价值。 解决方法是使用Mongoose> = 3.2.0中提供的MongooseArray#set。

 // query the document you want to update // set the individual indexes you want to update // save the document doc.array.set(3, 'changed'); doc.save(); 

编辑

我认为这将工作更新所有的行。 我有兴趣知道它是否工作。

 let rowQueries = []; theData.rows.forEach(row => { let query = Model.findOneAndUpdate({ issueId: theData.issueId, 'row._id': row._id }, { $set: { 'row.$': row } }); rowQueries.push(query.exec()); }); Promise.all(rowQueries).then(updatedDocs => { // updated });