检索子文档中的数组 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 路由中检索它们。现在一切正常!
我的用户模型结构有点像这样:
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 路由中检索它们。现在一切正常!