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

时间:2014-05-10 10:50:57

标签: javascript mongodb mongoose

Theser是我想要引用的两个模式。 我希望listingScheme userId引用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},

1 个答案:

答案 0 :(得分:2)

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

  1. 请记住使用复数型号名称(您有'用户'=>'用户')。
  2. 不要忘记为您的架构建模。
  3. 不要忘记使用.populate('userId')方法。
  4. 不要忘记与服务器连接(比您想象的更频繁)。
  5. 确保您确实已将文档连接到彼此。
  6. 经过测试的代码:

    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({});
    

    可运行链接:http://runnable.com/U24GoC9x3L9alfPc/output