繁体   English   中英

使用node.js将引用文档保存在mongodb中

[英]Save referring documents in mongodb with node.js

我在mongodb中使用以下模式有3个集合:

使用者

var userSchema = new Schema({
  email: String,
  password: String
});
var User = mongoose.model('User', userSchema);
module.exports = User;

帖子

var postSchema = new Schema({
  user_id: {
    type: Schema.ObjectId,
    ref: 'User'
  },
  group_id: {
    type: Schema.ObjectId,
    ref: 'Group'
  },
  msg: String
});

团体

var groupSchema = new Schema({
  name: String
});

如何保存帖子? 我现在正在做的是:

var newPost         = new Post();
        Group.findOne({"_id":req.body.group}, function(err, group){
            if (err) res.json(err);
            else {
                newPost.msg         = req.body.msg;
                newPost.user_id     = req.user;  //from cookie using passport.js
                newPost.group_id    = group._id;
                console.log(newPost);
            }

        });

我想在Post的方案中从User模式写入User的ID,从Group方案写入Group的ID? 在我看来,我使用SWIG:

<form action="/post_add" method="POST">
        <label for="msg">Message:</label><br>
        <textarea name="msg" id="msg" cols="30" rows="10"></textarea>
        <label>Select group:</label>
        <select name="group">
            {% for group in groups %}
                <option value="{{group.id}}">{{group.name}}</option>
            {% endfor %}
        </select>
        <input type="submit" value="Write!" />
    </form>

假设您使用express 4+body-parser作为中间件

var mongoose = require('mongoose');
var Post = mongoose.model('Post');

var express = require('express');
var router = express.Router();

router.post('/post_add', function (req, res, next) {
    var body = req.body;
    var user = req.user;

    var post = new Post({
        user_id: user._id,
        group_id: body.group,
        msg: body.msg
    });
    post.save(function (err) {
        if (err) { // failed
            console.error(err);
            res.redirect('/error');
        } else { // success
            res.redirect('/posts');
        }
    });
});

module.exports = router;

有关其他信息,请访问http://expressjs.com/en/api.html

注意 :您可能需要将{{group.id}}更改为{{group._id}}具体取决于将mongodb结果映射到groups视图数据的方式

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM