gpt4 book ai didi

angularjs - Mongoose 不会从 JSON 数组创建子文档

转载 作者:太空宇宙 更新时间:2023-11-04 00:37:06 24 4
gpt4 key购买 nike

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

所发生的情况是所有第一级数据都被存储,但数组中包含的任何内容都没有存储。当记录服务器接收到的数据时,我看到了整个对象,这让我相信我的 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 Controller 存储数据的部分。我认为这里没有任何问题。

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);
});
}

最佳答案

看看 Mongoose 常见问题解答中的第一个问题: http://mongoosejs.com/docs/faq.html

Mongoose doesn't create getters/setters for array indexes; without them mongoose never gets notified of the change and so doesn't know to persist the new value. The work-around is to use MongooseArray#set available in Mongoose >= 3.2.0.

// 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
});

关于angularjs - Mongoose 不会从 JSON 数组创建子文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38533811/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com