MEAN Mongodb 替换集合并创建文档

Posted

技术标签:

【中文标题】MEAN Mongodb 替换集合并创建文档【英文标题】:MEAN Mongodb replace collection and create documents 【发布时间】:2016-10-01 23:20:54 【问题描述】:

所以我有这样的架构:

var article = new mongoose.Schema(
    title : String,
    comments : [
        pe: mongoose.Schema.Types.ObjectId,
        ref: 'Comment'
    ]
);

和:

var comment = new mongoose.Schema(
    created : Date,
    text : String
);

现在我有了我的小型 Angular 应用程序,当我使用我的 API 和文章检索时,我得到如下信息:


    title : "please help me"
    comments : []

现在我在前端推送了一些 cmets,新对象是:


    title : "please help me"
    comments : [
        text : "Now, go f**k yourself",
        date : "1 January 1970 00:00:00 UTC."
    ]

当我调用 API 并更新文档时,我希望 mongo 自己创建子对象 cmets,有没有办法? 它应该自动执行吗?

【问题讨论】:

【参考方案1】:

我会这样写一篇文章架构(免责声明:我没有尝试过猫鼬):

var article = new mongoose.Schema(
    _id: String  // or mongodb.ObjectId? I'm not sure.
    title : String,
    comments : [
        _id: String    // this field is not nessesary
        text: String,
        date: String
    ]
);

var comment = new mongoose.Schema(
    created : Date,      // created or date?
    text : String
);

当你用你的 api 检索时,你会得到类似的东西:


  "_id": "ndrjgnd..fesf",
  "title": "grdgrdgr",
  comments: [ "text": "hello", "created": "2016:...:", ... , ] 

然后就可以从前端推送新的cmets了:


  "articleId": "ndrjgnd..fesf",     // this is important.
  "text": "balabala"

并更新数据库:db.article.update( _id: ariticleId, $push: newComment)

【讨论】:

没错,是我试图简化示例中的结构。在我的应用程序中,对象注释具有复杂的结构,我更喜欢将它单独放在另一个模式中,因为我应该能够查询它。 @GaetanoPessa 那么,有什么问题 我不是专家,我的想法是,如果我尝试在数据库中保存一个带有数组的 json 对象(包含注释的数组),该对象具有结构就像架构中的那个一样,mongo 应该自动识别是评论并创建我的评论对象。这不会发生。正常吗? @GaetanoPessa mongo 对您的架构一无所知。你得到了你放入 mongo 的东西。 IMO,mongo 在关系数据方面做得不好。在文章中存储评论对象或评论引用都不是一个好主意。查询语句比传统数据库更复杂。 dow... 那么如何在 mongo 中存储关系数据?

以上是关于MEAN Mongodb 替换集合并创建文档的主要内容,如果未能解决你的问题,请参考以下文章

mean.io 堆栈角长运行操作与 http 请求

在 MEAN 堆栈中更新 MongoDB 集合时添加引用的正确模式

在 MEAN Stack 应用程序中从 mongo db 检索数据

如何使用特定集合 Mongoose-Express-Mongodb (MEAN STACK)

如何将 MongoDB 集合中的数据存储为堆?

如何替换mongodb文档中的子字符串