【问题标题】:Mongoose many to many relation and circular structure to JSON猫鼬多对多关系和循环结构到 JSON
【发布时间】:2014-07-08 20:04:49
【问题描述】:

我正在尝试使用 mongoose 创建一个经典的文章/类别关联。
一切正常,但由于我试图将查询结果公开为 JSON,我收到 Converting circular structure to JSON 错误。
我知道这个问题与交叉引用模型有关,但我不知道如何解决这个问题。
这是我的模型架构。

var ArticleSchema = new Schema({
    created: {
        type: Date,
        default: Date.now
    },
    title: {
        type: String,
        default: '',
        trim: true
    },
    content: {
        type: String,
        default: '',
        trim: true
    },
    user: {
        type: Schema.ObjectId,
        ref: 'User'
    },
    categories: [{
        type: Schema.ObjectId,
        ref: 'Category'
    }]
});

ArticleSchema.statics.load = function(id, cb) {
    this.findOne({
        _id: id
    }).populate('user', 'name username').populate('categories', 'title').exec(cb);
};

/**
 * Category Schema
 */
var CategorySchema = new Schema({
    created: {
        type: Date,
        default: Date.now
    },
    title: {
        type: String,
        default: '',
        trim: true
    },
    user: {
        type: Schema.ObjectId,
        ref: 'User'
    }
},
{
    toObject: { virtuals: true },
    toJSON: { virtuals: true }
});

/**
 * Virtual Schema
 */

var articles = CategorySchema.virtual('articles');
articles.get(function () {
  return Article.find({categories : { $eq: this }});
});

【问题讨论】:

  • 如果您只想在典型的关系建模中构建结构,为什么还要使用 MongoDB?也许如果你给出了你想要解决的实际问题,那么你会得到一个解决方案(适合 NoSQL 建模响应)。否则,只需将关系建模与支持它的数据库引擎一起使用。或者您实际上可以考虑不使用关系建模,这就是您首先应该在这里的原因。

标签: json node.js mongodb mongoose


【解决方案1】:

似乎你有循环引用,这意味着你创建的 json 在某些地方调用它自己。我不确定这行是否可能是问题:

articles.get(function () {
  return Article.find({categories : { $eq: this }});
});

你为什么不尝试在 $eq 中使用硬核值??

【讨论】:

  • 我确定问题就在那里:文章正在填充类别,而类别正在填充文章。我知道这个问题,但我正在寻找解决方案。
  • 抱歉误会..所以..可能我错了,但是当您执行 $eq: this 时,那一刻的“this”是您创建的匿名函数,因此您递归调用功能是否相同?。
  • 您找到解决方案了吗?我正在删除_doc上的字段,这很讨厌
  • 在他的特定示例中,是 this 词,它指向返回对 this 的引用的同一个函数。所以如果你提到 _doc 是因为你已经有一个 doc,在这种情况下你可以调用 .toJSON() 方法 @dcsan
猜你喜欢
  • 1970-01-01
  • 2018-01-22
  • 2018-08-23
  • 2012-11-15
  • 1970-01-01
  • 2021-07-16
  • 1970-01-01
  • 2015-07-12
  • 1970-01-01
相关资源
最近更新 更多