Das finden einer MongoDB-Dokuments durch die ObjectId mit Mungo

Ich bin versucht, zu aktualisieren ein Dokument in MongoDB zu finden, indem Sie durch die ObjectId. Der Arbeitsablauf ist wie folgt (dies ist für einen blog).

  1. Einen neuen Beitrag erstellen in MongoDB, indem Sie übergeben einen Titel und Körper. Die ObjectId wird automatisch erstellt.
  2. Gehen Sie zum Bearbeiten der post. Es verwendet die ObjectId aus der URL zu greifen, es aus der Datenbank und zeigt es in der gleichen, neuen post-Formular, einfach mit der bereits vorhandenen Werte.
  3. Wenn der submit-button geklickt wird, will ich finden das Dokument von der ObjectId und aktualisieren Sie die Werte in der Datenbank mit denen in der post-form.

Schritt 1 & 2 einwandfrei funktionieren, aber Schritt 3 scheint nicht zu funktionieren. Es leitet zu der Seite, ich brauche es. Aber die Datenbank wurde nicht aktualisiert. Es ist der gleiche Wert wie es vorher war.

Hier ist der entsprechende code für den update-post Teil:

app.js

app.post "/office/post/:id/update", ensureAuthenticated, routes.updatePost

routes/index.js

mongoose = require 'mongoose'
ObjectId = mongoose.Types.ObjectId

Post = require '../models/Post'

...

updatePost: function(req, res) {
  var o_id, the_id;

  the_id = req.params.id;
  console.log(the_id); //510e05114e2fd6ce61000001

  o_id = ObjectId.fromString(the_id);
  console.log(o_id); //510e05114e2fd6ce61000001

  return Post.update({
    "_id": ObjectId.fromString(the_id)
  }, {
    "title": "CHANGE"
  }, res.redirect("/office/edit/posts"));
}

Ich bin mit Express und Mongoose.

Dies ist auch der post-Modell falls das hilft:

(function() {
  var Post, Schema, mongoose;

  mongoose = require('mongoose');

  Schema = mongoose.Schema;

  Post = new Schema({
    title: String,
    subhead: String,
    body: String,
    publish_date: {
      type: Date,
      "default": Date.now
    },
    mod_date: {
      type: Date,
      "default": Date.now
    }
  });

  module.exports = mongoose.model('Post', Post);

}).call(this);

Und hier ist der code für das Bearbeiten von blog-Beitrag-Ansicht:

app.js

app.get("/office/post/:id/edit", ensureAuthenticated, routes.editPost);

routes/index.js

editPost: function(req, res) {
  return Post.findById(req.params.id, function(err, post) {
    return res.render('edit-post', {
      post: post,
      title: post.title
    });
  });
}
InformationsquelleAutor David Yeiser | 2013-02-20
Schreibe einen Kommentar