繁体   English   中英

Express:将文档嵌入到现有文档中

[英]Express: Embed document in the existing document

我正在开发ExpressNodeMongo作为数据库的应用程序。 我有一个collection users ,该user可以具有多个registered-IDs 就像one-to-many关系。 我正在尝试将document嵌入用户集合中,如下所示:

post(function (req, res, next) {
    var pid=req.body.pid;
    var sid=req.body.sid;
    var rfname=req.body.rfname;
    var des=req.body.des;
    var brand=req.body.brand;
    var model=req.body.model;
    var serial=req.body.serial;
    var location=req.body.location;

    var arr={pid: 'pid', sid: 'sid', rfname: 'rfname' ,des: 'des', brand: 'brand', model: 'model' ,serial: 'serial', location: 'location'};

    mongoose.model('User').findOne({'pemail': req.session.email}, function (err, user){
        if(err){

        } else {
            user.registeredId = arr;

            user.save(function(err){
                if(err){

                } else {
                    res.render('user/register', {'success': 'dfhlaksdhfh'});
                }
            })
        }
    });
}

我的用户架构如下:

var mongoose = require('mongoose');  
var userSchema = new mongoose.Schema({  
  email: String,
  password: String,
  fname: String,
  lname: String,
  plang: String,
  slang: String,
  country: String,
  state: String,
  city: String,
  postalcode: String,
  address1: String,
  address2: String,
  pemail: String,
  semail: String,
  age: String,
  gender: String,
  pphone: String,
  sphone: String,
  q1: String,
  a1: String,
  q2: String,
  a2: String,
  cfname: String,
  clname: String,
  cemail: String
});
mongoose.model('User', userSchema);

指导我,我在做什么错,因为它没有将文档嵌入现有文档中。 我是否需要在模式中定义它,如果要定义,那么如何定义?

在您的模式定义中,未定义字段registeredId ,默认情况下通过strict选项 ,Mongoose确保传递给您的模型构造函数的未在我们的模式中指定的值不会保存到数据库,因此不会创建修改后的值。文献。

您可以在架构中显式定义字段,也可以在架构定义中将strict选项设置为false:

// set to false..
var userSchema = new Schema({..}, { strict: false });

然后实现诸如findOneAndUpdate()类的findAndModify()方法之一,通过将新对象推送到新的数组字段registeredId来更新用户文档。 因此,您可以将post函数重写为:

post(function (req, res, next) {
    var User = mongoose.model('User'),
        pid=req.body.pid,
        sid=req.body.sid,
        rfname=req.body.rfname,
        des=req.body.des,
        brand=req.body.brand,
        model=req.body.model,
        serial=req.body.serial,
        location=req.body.location, 
        arr = {
            'pid': pid, 
            'sid': sid, 
            'rfname': rfname,
            'des': des, 
            'brand': brand, 
            'model': model,
            'serial': serial, 
            'location': location
        },
        condition = { 'pemail': req.session.email },
        update = {
            "$push": { 'registeredId': arr }
        };

    User.findOneAndUpdate(
        condition,
        update,
        function (err, doc){
            if(err){} 
            else {
                // doc contains the modified document
                res.render('user/register', {'success': 'dfhlaksdhfh'});
            }
        }
    );
});

暂无
暂无

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

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