我有这两个模型
var postSchema = new Schema({
content : String,
author : [{
user : {
type: Schema.ObjectId,
ref: 'user'
},
bool: Boolean
}]
});
var userSchema = new Schema({
name : String
});
我正在尝试使用用户名填充Post而不是仅显示[Object]或id,如果i .toString它
我现在得到的是什么:
{ author: [ [Object], [Object], [Object] ],
_id: 5aedc4d3c534213279faec79,
content: 'hello',
__v: 0 } ]
使用.toString()获取
{ author:
[ { _id: 5aedc364ce3b022d4ff74922,
user: 5aedb9e47e055d1ac26aa572,
bool: true } ]
我想要的是什么:
{ author:
[ { _id: 5aedc4d3c534213279faec7c,
user: "Some name here", //( name instead of user _id )
bool: true },
{ _id: 5aedc4d3c534213279faec7b,
user: "Some name here",
bool: false },
{ _id: 5aedc4d3c534213279faec7a,
user: "Some name here",
bool: true } ],
_id: 5aedc4d3c534213279faec79,
content: 'hello',
__v: 0 }
这可能吗?
答案 0 :(得分:0)
您可以将populate方法与嵌套语法
一起使用const Post = mongoose.model('Post', postSchema);
const User = mongoose.model('User', userSchema);
Post
.find({})
.populate({path:'author.user', 'model':'User'})
.exec((err, posts) => {
if (err) return next(err);
posts.forEach(post => {
console.log(JSON.stringify( post, null, 2) ); // spacing level = 2
}
});
每个帖子都会输出(这不是您所需要的,但希望您可以灵活使用User
格式
{
_id: 5aedc4d3c534213279faec79,
content: 'some content',
author: [
{
user: {_id: 5aedc4d3c534213279faec7c, "user name here"}
bool: true
},
{
user: {_id: 5aedc4d3c534213279faec7b, "user name 2 here"}
bool: true
}
__v: 0
}
mongoose.populate的参考 http://mongoosejs.com/docs/populate.html