如何更新猫鼬中嵌入文档中的嵌入文档?

2024-01-04

我正在使用 mongodb 和 mongoose 在 node.js 中构建一个 API。目前,我有一个嵌入文档中的嵌入文档(架构中的架构),它根本没有保存到数据库中,我已尽我所能,但没有运气。

我在猫鼬中将架构定义为:

var BlogPostSchema = new Schema({
  creationTime: { type: Date, default: Date.now },
  author: { type: ObjectId, ref: "User" },
  title: { type: String },
  body: { type: String },
  comments: [CommentSchema]
});

var CommentSchema = new Schema({
  creationTime: { type: Date, default: Date.now },
  user: { type: ObjectId, ref: "User" },
  body: { type: String, default: "" },
  subComments: [SubCommentSchema]
});

var SubCommentSchema = new Schema({
  creationTime: { type: Date, default: Date.now },
  user: { type: ObjectId, ref: "User" },
  body: { type: String, default: "" }
});

而我执行的代码如下:

// Create a comment
app.post("/posts/:id/comments", function(req, res, next) {
  Posts.find({ _id : req.params.id }, function(err, item){
    if(err) return next("Error finding blog post.");                
    item[0].comments.push(new Comment(JSON.parse(req.body)));
    item[0].save(); // <= This actually saves and works fine
    respond(req, res, item[0].comments, next);
  });
});

// Create a subcomment
app.post("/posts/:id/comments/:commentid/subcomments", function(req, res, next) {
  Posts.find({ _id : req.params.id }, function(err, item){
    if(err) return next("Error finding blog post.");
    item[0].comments[req.params.commentid - 1].subcomments.push(new SubComment(JSON.parse(req.body)));
    item[0].save(); // <= This completes (without error btw) but does not persist to the database
    respond(req, res, item[0].comments[req.params.commentid - 1].subcomments, next);
  });
});

我可以毫无问题地创建带有评论的博客文章,但由于某种原因,我无法在评论上创建子评论。博客文章文档实际上在执行期间打印到控制台时附加了评论和子评论 - 只是它不保存到数据库(它保存带有评论的博客文章,但没有子评论)。

我尝试在评论数组上“markModified”,但没有改变:

Posts.markModified("comments"); // <= no error, but also no change
...
Posts.comments.markModified("subcomments"); // <= produces an error: "TypeError: Object [object Object] has no method 'markModified'"

问题既然解决了。亚伦·赫克曼 (Aaron Heckmann) 给了我答案猫鼬谷歌集团 https://groups.google.com/forum/#!topic/mongoose-orm/0p-rhtcJdng:

始终在将子模式传递给父模式之前声明它们,否则您将传递未定义的值。

SubCommentSchema 应该是第一个,然后是 Comment,最后是 BlogPost。

颠倒模式后,它起作用了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何更新猫鼬中嵌入文档中的嵌入文档? 的相关文章

随机推荐

  • 在公共基本路线之上构建路线?

    我有一个共同的基本路径 说 get base我需要执行基本身份验证并为该路径下的所有子调用工作 说 get base foo and get base bar 看着http www sinatrarb com intro html Help
  • Excel 和 IE7 - 阻止 IE 打开 Excel 文件

    我有一个 Intranet 网页 用于超链接到文件服务器上的各种文件 本地文件链接的问题是 Microsoft Excel 文件是在 IE7 而不是 Excel 中打开的 这会导致 Excel 文件 VBA 代码和其他功能正常工作 有没有办
  • 添加子视图后 superview 和parentviewcontroller nil

    我认为我错过了一些基本的东西 所以我想向社区寻求一些帮助 我正在构建一个基于基本 iPhone 实用程序应用程序的应用程序 我的 MainView 和 FlipsideView 共享一些元素 因此我为这些部分创建了单独的 ViewContr
  • 与 Riak 一起进行 MapReduce

    有谁有可以在单个 Riak 节点上运行的 Riak 的 mapreduce 示例代码吗 cd riak erl name email protected cdn cgi l email protection setcookie riak p
  • n 维数组构造函数的模板规范

    我正在实现一个 n 维数组类 它是一个模板 如下所示 请注意 数据存储在线性数组中 其长度是所有维度的乘积 template lt class valType int rank gt class NDimensionalArray publ
  • 查找多个变量的所有组合总和为 1

    我正在尝试解方程 x1 x2 x3 xn 1 其中所有的值xi仅限于 0 0 1 0 2 0 9 1 目前 我通过首先生成一个n维数组来解决问题mat 其中每个元素位置的值是轴值的总和 其变化范围为axisValues 0 0 1 1 ma
  • 在 Chrome 浏览器中调整 svg 图像的大小作为背景

    我使用 svg 图像作为背景 并通过背景大小拉伸 SVG 图像 我希望它仅在宽度方向上拉伸 它在 Firefox IE9 中工作完美 但在 Chrome 中工作得很好 请建议我如何实现它 homecallouts ul li backgro
  • 有没有办法释放 xarray.Dataset 的文件锁?

    我有一个生成 NetCDF 文件的进程fn每 5 分钟使用一次netcdf4 Dataset fn mode a 我还有一个 NetCDF 文件的散景服务器可视化 使用xarray Dataset 我想保留它 因为它太方便了 问题是 Net
  • 如何修复我的“itoa”实现,使其不打印反向输出?

    我想在C中将一个整数转换为一串数字字符 我尝试过使用itoa 但它是非标准的 并且不是由我的 C 库提供的 我尝试实现自己的itoa 但它无法正常工作 include
  • Hadoop 一次读取多行

    我有一个文件 其中每四行一组代表一条记录 例如 前四行代表记录 1 接下来的四行代表记录 2 依此类推 如何确保Mapper一次输入这四行 另外 我希望 Hadoop 中的文件分割发生在记录边界 行号应该是四的倍数 这样记录就不会跨越多个分
  • 访问服务的异步变量

    这是我的第一个 Angular 4 项目的一部分 我目前可以从搜索栏很好地调用 searchCall 函数 但存储在 tweetsData 中的数据似乎不在 app component html 中的 ngFor 调用范围内 并且作为异步后
  • 如何为使用 jQuery Mobile、PhoneGap 和 Django 实现的移动 Web 应用程序实现仅首次登录方案?

    我正处于开发移动 Web 应用程序的早期 预编码 阶段jQuery 移动 http en wikipedia org wiki JQuery Mobile 我们看了煎茶触摸 http en wikipedia org wiki Sencha
  • 发布查询,包括元数据和大于日期

    我正在努力寻找可行的解决方案wp query 我目前有一些分配给帖子的自定义设置 一是帖子是否 精选 二是帖子结束的日期和时间 不再显示在结果中 我有使用该功能的查询 但只需要将此结束日期纳入其中 这是使用 特色 查找的查询 WP Quer
  • 向 C++ 控制台应用程序添加状态栏

    我正在使用 C 制作一个 Linux 应用程序 它会将信息打印到控制台 程序的某些部分将需要一段时间来计算 我想在控制台中添加一个类似于 wget 中使用的状态栏 我在下面放置了我自己的描述 complete gt eta 实现这一目标的最
  • 绑定参数 4 时出错 - 可能是不受支持的类型

    我首先要提到的是 我通过 Flask SqlAlchemy 使用 SqlAlchemy 我不认为这会影响该问题 但如果会影响 请告诉我 这是我在 SqlAlchemy 中运行 create all 函数时收到的错误消息的相关部分 Inter
  • Android - 丢失传入(高速)USB 数据

    使用 Android 时 我会丢失传入 USB 数据流上的数据 而在 Windows 中读取同一设备 流时不会丢失这些数据 我知道 Android 不是实时操作系统 但 Windows 也不是 并且 Windows 在 跟上 数据方面没有任
  • 使用正则表达式检查字符串是否只包含一位数字

    我正在编写一个算法 我需要检查字符串是否包含only one数字 不超过一位 目前我有 if current Operation matches d 有更好的方法来做这件事吗 谢谢 您可以使用 D d D match beginning o
  • 如何将数据从托管程序集流式传输到本机库并再次返回?

    如何将数据 文本 从托管程序集流式传输到本机库并将数据 文本 流回托管程序集 具体来说 我想揭露一个System IO Stream NET 端的某种类型 并且 最重要的是 a FILE 在本机方面 本机方法的签名应该是 FILE foo
  • DataTable 上的 Linq:选择特定列到数据表中,而不是整个表

    我正在运行 LINQ 查询datatable in c 我想选择特定列而不是整行并将结果输入到datatable 我怎样才能做到这一点 My Code public DataTable getConversions string c to
  • 如何更新猫鼬中嵌入文档中的嵌入文档?

    我正在使用 mongodb 和 mongoose 在 node js 中构建一个 API 目前 我有一个嵌入文档中的嵌入文档 架构中的架构 它根本没有保存到数据库中 我已尽我所能 但没有运气 我在猫鼬中将架构定义为 var BlogPost