【问题标题】:Attaching custom field to Mongoose Schema将自定义字段附加到 Mongoose Schema
【发布时间】:2018-06-26 19:11:10
【问题描述】:

所以我有 StoryComment 模型。 另外,我有 INDEX 和 SHOW 路线。

所以在 INDEX 路线上,我有兴趣只返回已发布的 cmets 数量。我做了下一个方法:

StorySchema.methods.comments = function (cb) {
    return this.model('Comment').find({ storyId: this._id, published: true }, cb);
}

这是我的 INDEX 路线(目前显示 4 个最新故事):

Story.find({}, '-content')
        .sort('-dateCreated')
        .limit(4)
        .exec((err, found) => {
            found.map(async f => f.comments = await f.comments())

            if (err) return res.json({ err });

            res.json(found);
        })

我没有在 StorySchema 中定义 cmets 字段,但我想附上它只是为了展示,我不打算保存它。问题是,cmets 字段没有显示。即使我在 Schema 中定义它,它也不会改变。

如何将字段附加到 mongoose 文档,仅用于显示目的?

【问题讨论】:

    标签: node.js mongodb express mongoose


    【解决方案1】:

    你在上面写的查询

    Story.find({}, '-content')
    

    等价于

    Select -content from Story
    

    简而言之,当您投影一个要添加的字段作为响应时,这是唯一一个将作为响应投影给您的字段。

    对于您的情况,您可以考虑使用 aggregation 框架及其管道 $project$addField ,这就是它们在这里的原因。我的意思是他们不会修改您的文档架构。是的,它们可以很容易地用于在您的回复中投射额外的字段。您甚至可以使用多个运算符或表达式向这些虚拟字段添加值

    【讨论】:

    • 还有其他方法可以解决这个问题吗?也许像一个虚拟领域?您将如何在聚合中编写此代码?
    • 我已经附上了我的答案的链接。还是docs.mongodb.com/manual/reference/operator/aggregation/…这里你可以找到例子
    • 我更感兴趣的是 mongoose 方式来处理这个问题,而不是 mongodb?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    • 2012-11-13
    • 2018-09-12
    • 2014-05-29
    • 2011-11-21
    • 1970-01-01
    相关资源
    最近更新 更多