【问题标题】:compare two reference in Mongo?比较Mongo中的两个参考?
【发布时间】:2018-12-19 11:14:41
【问题描述】:

我在使用 mongodb 时遇到了一些问题

我的数据库中有用户架构,其中有两个参考 用于结果和另一个用于测试

var userSchema = new mongoose.Schema({
username: String,
email: { type: String , unique: true , required: true} ,
password: String,
gender: { type: String , required: true},
memberShip: {type: String , required: true , default: "pro"},
results: [
   {
    type:  mongoose.Schema.Types.ObjectId,
    ref: "Result"
   }
], 
tests: [
   {
    type: mongoose.Schema.Types.ObjectId,
    ref: "Test"
   }

],
resetPasswordToken: String,
resetPasswordExpiration: Date
});

这是我的结果架构

var resultSchema = new mongoose.Schema({
testName: String,
testId: Number,
totalResult: Number
})

这是测试模式

var testSchema = new mongoose.Schema({
testNumber: Number 
})

问题是我想在 html 中访问这些引用以向用户显示值 我尝试使用填充但我没有工作

app.get("/test/:id" , isLoggedIn ,function(req , res){
User.findById(req.params.id).populate("results").populate("tests").exec( 
function(error , userResult){
if(error && !userInfo){
  console.log(error)
  req.flash("error" , "error")
  res.redirect("back")
} else {
  res.render("testPage" , {userResult: userResult})
}
})
})

【问题讨论】:

  • 您面临什么问题?有什么错误吗?
  • 不,没有错误,但值也没有显示在html中
  • 您可以记录您的 userResult 并将其放入问题中吗,您还可以展示您如何建模您的架构
  • 是的,它打印得很好,但是当我尝试访问 testNumber 的值时它打印 undefined 我想我访问 ref 值有误
  • 我这样打印 console.log(userResult.tests.testNumber)

标签: javascript html css node.js mongodb


【解决方案1】:

我为您的问题创建了这个测试(基于您的架构):

  //create test object
  let test = new TestModel({
    testNumber:10,
  });

  let testSaved = await test.save()
    .then((result) => {
      console.log(result);
      return result;
    }).catch((err) => {
      console.log(err)
    });

  //create result object
  let result = new ResultModel({
    testName: 'test name',
    testId: 10,
    totalResult: 20
  });

  let resultSaved = await result.save()
    .then((result) => {
      console.log(result);
      return result;
    }).catch((err) => {
      console.log(err)
    });

  //create user object with result and test objects
  let user = new UserModel({
    username: 'test name',
    email: 'test@test.com' ,
    password: '123abc',
    gender: 'male',
    memberShip: "pro",
    results: [resultSaved._id],
    tests: [testSaved._id],
    resetPasswordToken: 'teste',
    resetPasswordExpiration: new Date()
  });

  return await user.save()
    .then((result) => {
      console.log(result);
      return result;
    }).catch((err) => {
      console.log(err)
    });

这是在数据库中生成的数据:

之后我执行了填充命令:

UserModel.findById({_id:"5b4a7169df0fdf56bf3574fb"})
    .populate('results')
    .populate('tests')
    .then((result) => {
    console.log('---RESULTS---');
    console.log(result._doc.results);
    console.log('---TESTS---');
    console.log(result._doc.tests);
  }).catch((err) => {
    console.log(err)
  });

而且效果很好:

尝试执行这段代码,相信会解决你的问题。

关于填充函数的 Mongoose 文档:Mongoose Populate

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-04
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多