Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Mongoose-Foregin密钥映射_Javascript_Angularjs_Node.js_Mongodb_Nodes - Fatal编程技术网

Javascript Mongoose-Foregin密钥映射

Javascript Mongoose-Foregin密钥映射,javascript,angularjs,node.js,mongodb,nodes,Javascript,Angularjs,Node.js,Mongodb,Nodes,我是MongoDB/Mongoose的新手,正在尝试找出如何映射模式之间的关系。我认为问题不在于.populate()。在创建新用户和客户端时,我看不到集合中反映的关系 用户(通过本地/社交登录)有许多客户端。 一组客户端属于1个用户 这是声明外键的正确方法吗?{type:Schema.Types.ObjectId,ref:'Client'} 两个模式是否都应该具有彼此的外键以相互关联 在创建用户/客户端时,是否需要其他代码才能显示外键中的数据?我读了一些关于populate()的文章 使用者

我是MongoDB/Mongoose的新手,正在尝试找出如何映射模式之间的关系。我认为问题不在于.populate()。在创建新用户和客户端时,我看不到集合中反映的关系

用户(通过本地/社交登录)有许多客户端。 一组客户端属于1个用户

  • 这是声明外键的正确方法吗?{type:Schema.Types.ObjectId,ref:'Client'}
  • 两个模式是否都应该具有彼此的外键以相互关联
  • 在创建用户/客户端时,是否需要其他代码才能显示外键中的数据?我读了一些关于populate()的文章
  • 使用者

    客户

    var mongoose = require('mongoose');
    var Schema = mongoose.Schema;
    
    var clientSchema = new Schema({
    
        id: String,
        firstname: String,
        lastname: String,
        mobile: String,
        user: {type: Schema.Types.ObjectId, ref: 'User'}
    
    });
    
    module.exports = mongoose.model('Client', clientSchema);
    
    创建用户

    app.post("/api/user", function (req, res) {
    const user = req.body;
    console.log(user);
    
    User.findOne({ 'local.email': user.email },
      function (err, result) {
        if (err) {
          console.log(err);
          handleError(err, res);
          return;
        }
        if (result) {
          res.status(500).send("Email already exists in database");
        } else {
          var newUser = new User();
          newUser.local.password = generateHash(user.password);
          newUser.local.email = user.email;
          newUser.local.name = user.name;
          newUser.local.mobile = user.mobile;
          newUser.save(function (err, result) {
            res.status(201).send("User added to database");
          });
        }
    
      });
     });
    
    创建客户端

    app.post("/api/client", function (req, res) {
    const client = req.body;
    console.log(client);
    
    Client.findOne({
      $and: [
             { firstname: client.firstname },
             { lastname: client.lastname }
           ]
    },
      function (err, result) {
        if (err) {
          console.log(err);
          handleError(err, res);
          return;
        }
        if (result) {
          res.status(500).send({msg:"Client already exists in database"});
        } else {
          var newClient = new Client();
          newClient.firstname = client.firstname;
          newClient.lastname = client.lastname;
          newClient.mobile = client.mobile;
          newClient.save(function (err, result) {
            res.status(201).send("Client added to database");
          });
        }
    
      });
    
     });
    

    谢意@shivshankar的可能副本。我已经看到了这个问题,还有更多的问题,但因为我在stackoverflow上没有收集到足够的积分,所以我不能添加评论来问更多的问题。对于我来说,在创建阶段,用户集合没有客户端数据,所以我的问题不是。populate()我想…好吧,从我的帐户中获得一些信任@@shivshankar!我刚试过,看起来我需要50的声誉。呃,还没有。无论如何,问题是关于查找数据,但我的问题是关于保存数据,这是不同的
    app.post("/api/client", function (req, res) {
    const client = req.body;
    console.log(client);
    
    Client.findOne({
      $and: [
             { firstname: client.firstname },
             { lastname: client.lastname }
           ]
    },
      function (err, result) {
        if (err) {
          console.log(err);
          handleError(err, res);
          return;
        }
        if (result) {
          res.status(500).send({msg:"Client already exists in database"});
        } else {
          var newClient = new Client();
          newClient.firstname = client.firstname;
          newClient.lastname = client.lastname;
          newClient.mobile = client.mobile;
          newClient.save(function (err, result) {
            res.status(201).send("Client added to database");
          });
        }
    
      });
    
     });