【发布时间】:2014-10-09 19:45:12
【问题描述】:
我有两个对象,childPost 和 parentPost。我想将 childPost 作为 Subelement 存储到 parentPost,反之亦然,但无论我尝试什么,我总是遇到:
RangeError: Maximum call stack size exceeded
stackoverflow 上已经有很多关于这个主题的主题,但似乎没有一个与我遇到的确切问题有关。
我的代码(省略了错误处理等不必要的代码):
async.parallel([
function () {
originalPost.subPosts.push(post);
originalPost.save(function (err) {
});
},
function () {
post.originalPost.push(originalPost);
post.save(function (err, post) {
});
}
], sendResponse(res, 201, post));
我在上述解决方案之外尝试了什么:
- 没有
asynclib的相同代码 -
setImmediate(),nextTick(),setTimeout() - 省略了
post.originalPost.push(originalPost);- 这可行,但它不会将子元素保存在我的子帖子中
我使用:
- node.js v0.11.14-pre
- 猫鼬
- 快递
- mongodb v2.4.9
编辑:我的数据模型:
var postSchema = new mongoose.Schema({
sharedPosts: [subPostSchema],
originalPost: [subPostSchema],
// ...-
});
我的subPostSchema 看起来就像我的postSchema(不幸的是,我无法在没有错误的情况下执行sharedPosts: [postSchema] -> 所以我复制了我的架构。对我来说似乎是错误的,但这是我能得到的唯一方法它到目前为止工作)
【问题讨论】:
-
这个错误大概是因为代码序列化了结构,不知道如何处理循环关系。你是如何序列化数据的?
-
相关,这可能是也可能不是它的副本:stackoverflow.com/questions/21413864/…
-
感谢您的帖子,但我认为这不完全是我的问题 - 如果我是对的 ;) - 因为我没有对另一个对象的引用,但将完整的帖子添加为
sharedPost或originalPost到当前帖子对象 -
你肯定有同样的问题(循环引用)。您必须在应用层中对其进行分类,使用某种间接引用(ID 或类似的),而不是对象引用。
-
感谢您的帮助!现在我明白了为什么我有这个问题。从我的
subPostSchema中删除sharedPosts: [subPostSchema]和originalPost: [subPostSchema]工作
标签: javascript node.js mongodb express mongoose