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

使用Mongoose,Express,NodeJS更新模型

萧宁
2023-03-14
问题内容

我正在尝试在MongoDB中更新实例化模型(“地方”-我知道它可以在其他路线中使用),并且花了一段时间尝试正确地做到这一点。我还试图重定向回查看“位置”的页面,以查看更新的属性。

节点v0.4.0,Express v1.0.7,Mongoose 1.10.0

架构:

var PlaceSchema = new Schema({
name  :String
,  capital: String
,  continent: String
});

控制器/路线:

app.put('/places/:name', function(req, res) {
var name = req.body.name;
var capital = req.body.capital;
var continent = req.body.continent;
Place.update({ name: name, capital: capital, continent: continent}, function(name) {
    res.redirect('/places/'+name)
});

});

我尝试了多种方法,但似乎无法理解。
另外,我不是如何声明三个{name,capital和continent}变量来阻止进一步的操作吗?谢谢。一般调试帮助也将受到赞赏。Console.log(name)(在声明的正下方)不记录任何内容。

翡翠形式:

h1 Editing #{place.name}
form(action='/places/'+place.name, method='POST')
  input(type='hidden', name='_method', value='PUT')
  p
    label(for='place_name') Name:
    p
    input(type='text', id='place_name', name='place[name]', value=place.name)
    p
    label(for='place_capital') Capital: 
    p
    input(type='text', id='place_capital', name='place[capital]', value=place.capital)
    p
    label(for='place_continent') Continent:
    p
    textarea(type='text', id='place_continent', name='place[continent]')=place.continent
    p
    input(type="submit")

问题答案:

您必须在更新任何内容之前先找到文档:

Place.findById(req.params.id, function(err, p) {
  if (!p)
    return next(new Error('Could not load Document'));
  else {
    // do your updates here
    p.modified = new Date();

    p.save(function(err) {
      if (err)
        console.log('error')
      else
        console.log('success')
    });
  }
});

使用与您相同的设置在生产代码中为我工作。您可以使用mongoose提供的任何其他find方法来代替findById。只要确保在更新文档之前先获取文档即可。



 类似资料:
  • 问题内容: 使用Mongoose可以一次性在一个(子)文档上设置多个属性吗?我正在尝试做的一个例子: 假设我有以下架构: 然后我想做: 通常,我可以使用运算符来实现此目的,但是我的问题是在此示例中是的子文档(嵌入式架构)。所以当我尝试去做 它替换了由标识的子文档实例。目前,我已经通过手动设置仅字段来“解决”它,但是我希望有一种更好的方法来做到这一点。 问题答案: 基于的字段以编程方式构建对象,以使

  • 我有Category mongoose文档,我想更新他的产品。每次更新产品时,只需重写它们,而我只有最后一个put记录。我如何填充产品?

  • 问题内容: 创建新用户帐户后,我创建了newUser,这是一个Mongoose模型实例,如下所示: 该对象的实际数据位于 _doc 属性中,尽管存在getter和setter,所以您可以运行: 这样就可以了。我跑: 将用户保存到会话。到目前为止,一切都很好。 但是,在后续请求中,request.session.user似乎只是_doc中的内容。例如: 很好,但这意味着我无法运行例如 request

  • 我对Mongoose/Mongo和node非常陌生。js,所以我怀疑这只是我的误解,但是。。。 下面的代码示例是最小的失败示例,而不是我的用例。 这会导致以下错误:将更新应用于文档{_id: ObjectId('54647402cb955748153ea782'),...}后,发现(不可变)字段'_id'已更改为_id: ObjectId('546d9e0e539ed9ec102348f9') 为

  • 我在MongoDB中有一个非常简单的数据库,其中一部分包含在用户和游戏中。像这样的东西: 所以现在当我创建游戏时,我也想更新游戏中的用户添加_id。例如,如果我用_id778创建了一个游戏,并且这个游戏由_ids111和222的用户玩,那么这些用户将把他们的游戏属性更新为添加778。 在给定的时间内,同一个用户可能在玩不同的游戏,所以用户游戏会进化,游戏:[778]= 为此,我使用Mongoose

  • Mongoose Node.js Express TypeScript application boilerplate with best practices for API development. The main purpose of this repository is to show a good end-to-end project setup and workflow for wri