Javascript 我似乎无法引用2个模式来填充

Javascript 我似乎无法引用2个模式来填充,javascript,mongodb,mongoose,Javascript,Mongodb,Mongoose,这些是我想要参考的两个模式。 我希望ListingScheme用户id引用userScheme的_id。这是2天的工作,请帮助 var userScheme = new Schema({ email: { type: String }, password: { type: String }, fullName: { type: String }, coverPhoto: { type: String}, profilePhoto: { type: String}, fbUserID: { typ

这些是我想要参考的两个模式。 我希望ListingScheme用户id引用userScheme的_id。这是2天的工作,请帮助

var userScheme = new Schema({
email: { type: String },
password: { type: String },
fullName: { type: String },
coverPhoto: { type: String},
profilePhoto: { type: String},
fbUserID: { type: String},
profileExtraInfo: { type: Array},
listings: {type: Schema.Types.ObjectId, ref: "Listings"}

var listingsScheme = new Schema({
category: { type: String, index: true }, 
title: { type: String },
description: { type: String },
attributes: { type: Array },
nrViews: {type: Number },
photos: { type: Array },
location: { type: Array, index: '2d' },
created: { type: Date, index: true },
updated: { type: Date },
active: { type: Boolean, index: true } ,
userId : { type: Schema.Types.ObjectId, ref : 'User' } ,
fullName : { type: String },
profilePhoto : { type : String},
followers : {type : String},

除了语法错误之外,代码应该可以正常工作

  • 记住使用复数模型名(您有'User'=>'users')
  • 别忘了为你的模式建模
  • 不要忘记使用.populate('userId')方法
  • 不要忘记连接服务器(发生的频率比您想象的要高)
  • 确保您的文档确实相互连接
  • 测试代码:

    var mongoose  = require('mongoose');
    
    //  connect with database.
    mongoose.connect('mongodb://localhost:27017/temp');
    
    var userScheme = new mongoose.Schema({
      email: { type: String },
      password: { type: String },
      fullName: { type: String },
      coverPhoto: { type: String},
      profilePhoto: { type: String},
      fbUserID: { type: String},
      profileExtraInfo: { type: Array},
      listings: {type: mongoose.Schema.Types.ObjectId, ref: "Listings"}
    });
    
    var listingsScheme = new mongoose.Schema({
      category: { type: String, index: true }, 
      title: { type: String },
      description: { type: String },
      attributes: { type: Array },
      nrViews: {type: Number },
      photos: { type: Array },
      location: { type: Array, index: '2d' },
      created: { type: Date, index: true },
      updated: { type: Date },
      active: { type: Boolean, index: true } ,
      userId : { type: mongoose.Schema.Types.ObjectId, ref : 'User' } ,
      fullName : { type: String },
      profilePhoto : { type : String},
      followers : {type : String}
    });
    
    //  don't forget to 'model' your scheme.
    var users    = mongoose.model('User', userScheme);
    var listings = mongoose.model('listings', listingsScheme);
    
    //  create mock user.
    var user = new users({
      email:'test'
    });
    
    //  create mock listing with the user_id attached to property userId.
    var listing = new listings({
      userId:user._id
    });
    
    //  save the created user and listing.
    user.save();
    listing.save();
    
    //  find ONE document in the collection 'listings'.
    //  populate the userId.
    //  execute the function and let mongoose call your callback.
    listings.findOne().populate('userId').exec(function(err, doc)
    {
      //  ensure there are no errors.
      if(!err && doc)
      {
        //  print the doc we found.
        //  should give userdoc inside userId property.
        console.log(doc);
      }
    });
    
    //  clear collections.
    //users.remove({});
    //listings.remove({});
    

    Runnable link:

    我已经按照你说的做了所有的事情,但是当我使用Listings.find(queryString)、populate(userId)时,它仍然不起作用。你看到了什么?您是否获得没有嵌入用户文档的列表?Try:
    Listings.find().populate('userId').exec(回调)