如何在我的猫鼬对象中包含来自另一个集合的数据?

时间:2017-09-06 02:54:36

标签: angularjs node.js mongodb mongoose

我正在使用带有Angular前端的mongoDB和NodeJS构建应用程序。我目前有用户创建列表,然后其他用户使用这些列表中的出价进行回复,但希望包含这些响应者的数据。我很难在出价创建功能中包含该用户数据,并且不确定为什么不拉动。

这是列表架构

var mongoose = require("mongoose");
var Schema = mongoose.Schema;

var Bid = require('./bid');

var ListingSchema = new Schema({
  topic: String,
  description: String,
  budget: String,
  location: String,
  req1: String,
  req2: String,
  req3: String,
  created: String,
  dateReq: String,
  uid: String,
  bids: [Bid.schema]
})

这就是我目前创建新商家信息的方式

function create(req, res) {
  db.User.findById(req.user, function (err, user) {
    if (err) {console.log(err);}
    var newListing = new db.Listing(req.body);
    newListing.uid = user._id
    newListing.save(function (err, savedListing) {
      if (err) {
         res.status(500).json({ error: err.message });
      } else {
        user.listings.push(newListing);
        user.save();
        res.json(savedListing);
      }
    });
  });
};

这适用于新的出价。由于某种原因,db.User信息没有被提取,我的控制台日志显示一个空白对象。 (是的,我评论了它)

 function create(req, res) {
  //  db.User.findById(req.user, function (err, user) {
  //    console.log(req.user);
  //    if (err) {console.log(err);}
      db.Listing.findById(req.params.listingId, function(err, foundListing) {
       var newBid = new db.Bid(req.body);  // add data validation later
   //  newBid.uid = user._id
       foundListing.bids.push(newBid);
       foundListing.save(function(err, savedBid) {
         res.json(newBid);
       });
      });
   });
 };

1 个答案:

答案 0 :(得分:0)

尝试使用user_id作为Object引用,并在需要时填充它,您的架构应该有点像这样

var ListingSchema = new Schema({  topic: String,description: String, budget: String,  location: String,  req1: String,  req2: String,  req3: String,  created: String,  dateReq: String,//THIS CREATES A REFERENCE TO THE SCHEMA USER AND TO USE THIS YOU CAN POPULATE IT..  uid: {type:Schema.type.ObjectId,ref:User}, bids: [Bid.schema]})