当前位置: 首页 > 面试题库 >

猫鼬-带有嵌入式文档的模型保存表格

郎志
2023-03-14
问题内容

将嵌入式阵列保存到Mongoose模型时遇到麻烦。

请参阅底部的编辑。

我有一种使用Mongoose在Express中创建BlogPost并将其存储在mongo中的数据的表单。我可以创建和查看新的博客文章,但是我只是在BlogPost模型中添加了嵌入式文档架构Feed,但无法获取Feed数组以将其从表单保存到模型中

码:

BlogPosts.js

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/my_database');

var Schema = mongoose.Schema
  , ObjectId = Schema.ObjectId;

var Feeds = new Schema({
    name      : { type: String }
  , key       : { type: String }
});

var BlogPost = new Schema({
    author    : ObjectId
  , title     : { type: String, required: true, index: { unique: true } }
  , date      : { type: Date, required: true, default: Date.now }
  , feeds     : [Feeds]
});

mongoose.model('BlogPost', BlogPost);

web.js

...
app.get('/blogpost/new', function(req, res) {
    res.render('blogposts/blogpost_new.jade', { locals: {
        title: 'New BlogPost'
    }
    });
});

app.post('/blogpost/new', function(req, res){
    var b = new BlogPost(req.body.b)
    b.save(function() {
      b.feeds.push();
      res.redirect('/blogposts');
    });
});
...
var BlogPost = mongoose.model('BlogPost', BlogPost);

翡翠形式

form( method="post")
  div
    div
      span Title :
      input(type="text", name="b[title]", id="editBlogPostTitle")
    div 
      span Feeds :
      ul 
        li 
          span name
          textarea( name="f[name]", rows=20, id="editBlogPostBodyName")
        li
          span key
          textarea( name="f[key]", rows=20, id="editBlogPostBodyKey")
    div#editBlogPostSubmit
      input(type="submit", value="Send")

如果我填写此表格,则模型会发布并保存,但供稿数据不存在("feeds" : [ ])。

如何正确提交提要数据以保存到阵列?

编辑

因此,我设法建立了一个表单来保存Feed对象,namekey在BlogPost中并在其中进行以下操作。但是,这仍然需要改进,以允许在创建单个BlogPost时保存多个Feed。使用当前的解决方案,我只能正确保存一个Feed。有什么想法吗?

blogposts.js(只需将Feed更改为Feed

var Feed = new Schema({
...

web.js(只是推动了推送)

app.post('/blogpost/new', function(req, res){
    var b = new BlogPost(req.body.b)
    b.feeds.push(req.body.feed);
    b.save(function() {
      res.redirect('/blogposts');
});

});

表格(只需更改Feed名称)

    li
        span name
        textarea( name="feed[name]", rows=20, id="editBlogPostBodyKey")
    li
        span key
        textarea( name="feed[key]", rows=20, id="editBlogPostBodyKey")

这样可以正确保存,在保存时我无法在一个博客文章中创建多个提要。任何帮助,不胜感激。谢谢。


问题答案:

对于它的价值,我确实做到了这一点。请参阅上面的修改,一旦我将Feed名称添加[]到"feed[0][name]" and "feed[0][key]",然后进行了修改,该修改就会起作用"feed[1][name]" and "feed[1][key]"。感谢Chance的一些好主意。对我来说,将这种逻辑放在“获取”路线上是行不通的,它需要放在“职位”中。非常感谢。



 类似资料:
  • 问题内容: 我对在我的主模式中使用子文档和更深层的优缺点感到好奇: 要么 我目前在各处使用子文档,但主要是想知道性能或查询我可能遇到的问题。 问题答案: 根据文档,它是完全一样的。但是,使用Schema也会添加一个字段(只要您没有禁用该字段),并且大概会使用更多资源来跟踪子文档。 备用声明语法 v3中的新增功能 如果不需要访问子文档架构实例,则还可以通过简单地传递对象文字来声明子文档[…]

  • 问题内容: 我浏览了猫鼬API,以及关于SO和google小组的许多问题,但仍然无法弄清更新嵌入式文档。 我正在尝试使用args的内容更新此特定的userListings对象。 以下是架构: 此发现也不起作用,这可能是第一个问题: 返回: 那应该等同于此mongo客户呼叫: 运行: 问题答案: 当您已有用户时,您可以执行以下操作: 如在这里找到:http : //mongoosejs.com/do

  • 问题内容: 我使用Mongoose.js,无法解决3级层次结构文档的问题。 有2种方法可以做到。 首先 -没有裁判。 我需要出示C记录。仅知道_id的C,如何填充/找到它? 我曾尝试使用: 但是我不知道如何从returnet得到一个对象,我只需要c对象。 其次, 如果使用裁判: 如何填充所有B,C记录以获取层次结构? 我试图使用这样的东西: 但是它将为single_c.title返回undefin

  • 问题内容: 在阅读教程时,通常会在模式和模型之间进行区分,特别是在处理mongoose / mongodb时。由于在该系统下似乎不存在“模型”,因此移植到Postgresql会有些混乱。两种方法有什么区别? 例如,此行的postgres / sql ORM等价于什么? (猫鼬和express.js): 问题答案: 在猫鼬中,模式表示特定文档的结构,可以是完整文档,也可以是文档的一部分。这是表达期望

  • 问题内容: 我在这里看到了很多关于这个问题的答案,但是我还是不明白(也许是因为他们使用了更多“复杂”的例子)……所以我试图做的是为“客户”建立一个模式将具有两个具有嵌套“子字段”的字段,其他字段可能重复。这是我的意思: 电话 和 电子邮件 可能是一个数组。和地址将不会重复,但是您会看到一些子字段。 我该如何工作? 问题答案:

  • 问题内容: 如何将一个架构添加到另一个架构?这似乎无效: 我检查了网站,它显示了如何为数组声明而不是为单个声明。 谢谢 问题答案: 有几种方法可以做到这一点。最简单的就是这样: 然后,您只需确保您的应用程序正在编写该ID,并在查询中使用该ID即可根据需要提取“相关”数据。 按用户ID搜索任务很好,但按任务ID查询用户则比较麻烦: 另一种方法是利用Mongoose的填充功能来简化查询。为此,您可以执