检索子文档中的数组 MongoDB

Retrieve Array in Subdocument MongoDB

我的用户模型结构有点像这样:

const userSchema = new mongoose.Schema({
  email: { type: String, unique: true },
  password: String,

  todosDo: [models.Do.schema],
}

子 "Do" 架构有点像这样(在不同的文件中):

const doSchema = new mongoose.Schema({
  name: {type: String, default : ''},
  user: {type: mongoose.Schema.ObjectId, ref: 'User'},
  createdAt: {type : Date, default : Date.now}
});

我正在尝试弄清楚如何为登录用户检索 todosDo 数组。这是我到目前为止得到的:

// Get all "Do" todos from DB
// Experimenting to find todos from certain user
  User.findById(req.user.id, function(err, user){
    if(err){
        console.log(err);
    } else {
      doTodos = user.todosDo, // this obviously doesn't work, just an idea of what I was going for
      console.log(doTodos); 
      finished();
    }
  });  

我是在引用 child/parent 错误还是只是没有正确检索数组?非常感谢任何帮助!

到目前为止,我猜你可能想编辑为原始 js 对象,所以你需要使用 lean() 函数。不使用 lean() 函数 user 是 mongoose 对象所以你不能修改它。

可以试试这个:

User.findById(req.user.id)
  .lean()
  .exec(function (err, user) {
    if(err){
      console.log(err);
      return res.status(400).send({msg:'Error occurred'});
    } 
    if(!user) {
      return res.status(400).send({msg:'User Not found'});
    }

    doTodos = user.todosDo;
    console.log(user.todosDo); // check original todos
    console.log(doTodos);
    return res.status(200).send({doTodos : doTodos }); // return doTodos 

  });

并在父模式中引用来自不同模型的子模式,您可以通过其schema访问模型的模式属性.

doSchema.js文件中说

const doSchema = new mongoose.Schema({
  name: {type: String, default : ''},
  user: {type: mongoose.Schema.ObjectId, ref: 'User'},
  createdAt: {type : Date, default : Date.now}
});
module.exports = mongoose.model( 'DoSchema', doSchema );

user.js 文件中

var DoModel = require('./doSchema');// exact path
const userSchema = new mongoose.Schema({
  email: { type: String, unique: true },
  password: String,

  todosDo: [DoModel.schema],
}

感谢大家的帮助!我的问题是我需要将 post 路由中所有新创建的 todos 推送到 todosDo,这样我就可以在 get 路由中检索它们。现在一切正常!